美文网首页Go语言用例Go知识库
golang如何设置子进程的环境变量

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

作者: CodingCode | 来源:发表于2018-05-02 14:03 被阅读31次

    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对象。

    相关文章

      网友评论

        本文标题:golang如何设置子进程的环境变量

        本文链接:https://www.haomeiwen.com/subject/cyqcrftx.html