exec.Command和终端执行结果不同

时间:2019-08-19 05:25:56

标签: go tfs

我想在我的Go程序中使用tf。像这样:

func main() {
    cmd := exec.Command("tf", `workspace`, `-new`, `testsssss`, `-collection:http://xxx.xxx.xxx:8080/tfs/new/`, `-login:Administrator,op@ms2019`)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err := cmd.Run()
    if err != nil {
        panic(err)
    }
}

但是我总是得到结果:

  

错误:连接到TFS服务器时访问被拒绝   http://xxx.xxx.xxx:8080/(以管理员身份认证)

当我在终端中运行命令时,它会起作用:

  

tf工作区-new testsss-集合:http://xxx.xxx.xxx:8080/tfs/new/   -login:Administrator,op @ ms2019

我试图将其写入外壳文件,然后使用exec调用它,但仍然失败。

1 个答案:

答案 0 :(得分:1)

  

我试图将其写入外壳文件,然后使用exec调用它,但仍然失败。

如果您尝试手动执行该Shell文件怎么办?

您可能还希望转储HTTP通信并找出任何明显的区别。可以使用tcpdump:tcpdump -A -vvv port 8080

完成

该问题还可能与您的子进程的stdin连接到/ dev / null有关,因此,如果二进制文件希望读取任何内容,则该行为与从shell手动运行该行为有所不同(其中子进程继承了您外壳程序的标准输入)。