登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-24 19:09:34 499浏览 收藏

本篇文章向大家介绍《exec.Command和终端执行结果不同》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我想在我的 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工作区-新testss-集合:http://xxx.xxx.xxx:8080/tfs/new/ -登录:管理员,op@ms2019

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


解决方案


如果您尝试手动执行该 shell 文件会怎样?

您可能还想转储 HTTP 流量并找出任何显着的差异。这可以通过 tcpdump 完成:tcpdump -A -vvv port 8080

该问题也可能与您的子进程的 stdin 连接到 /dev/null 这一事实有关,因此,如果二进制文件期望读取那里的任何内容,则行为将与从 shell 手动运行它不同(其中子进程继承 shell 的标准输入)。

本篇关于《exec.Command和终端执行结果不同》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>