Go语言用例Go知识库

golang如何设置子进程的环境变量

2018-05-02  本文已影响31人  CodingCode

golang如何设置子进程的环境变量

在C/C++里面我们可以使用fork()系统调用,然后在fork出来的子进程里面重新设置环境变量,最后在运行execl()系列命令加载子程序。

但是在golang里面并没有提供类似的fork()系统函数,如何调整子进程的环境变量呢。

exec.Command调用子进程的代码例子:

    cmd := exec.Command(cccmd, ccparam)
    cmd.Stdout = fifo
    cmd.Stderr = fifo

    
    ChangeYourCmdEnvironment(cmd)

    err = cmd.Run()
    if err != nil {
        Error("chaincode execution quit, error=[%v]", err)
    }

我们看ChangeYourCmdEnvironment,如何为Cmd设置环境变量:

func ChangeYourCmdEnvironment(cmd * exec.Cmd) error {
    env := os.Environ()
    cmdEnv := []string{}

    for _, e := range env {
        i := strings.Index(e, "=")
        if i > 0 && (e[:i] == "ENV_NAME") {
            // do yourself
        } else {
            cmdEnv = append(cmdEnv, e)
        }
    }
    cmd.Env = cmdEnv

    return nil
}

我们看到Cmd对象里面对Env的解释

type Cmd struct {
  ...
    // Env specifies the environment of the process.
    // If Env is nil, Run uses the current process's environment.
    Env []string
  ...

就是一个环境变量数组,我们自然可以增加,删除,修改这个数组的内容,然后重新赋值给Cmd对象。

上一篇 下一篇

猜你喜欢

热点阅读