登录
首页 >  Golang >  Go问答

golang exec命令输出为空

来源:stackoverflow

时间:2024-03-16 17:18:30 276浏览 收藏

Go 中使用 exec 命令时,若希望获取输出字符串,但输出为空,则可能是因为目标命令检测到 stdout 不是终端,从而改变了其默认输出。例如,ncftpput 在终端中运行时会显示进度表,但在 exec.Command 上下文中运行时,输出可能为空。

问题内容

我想在 go 中运行 ncftpput 并希望获取输出字符串进行分析 但只能输出以下样式。

    cmdstr := "ncftpput -r -f c:\\users\\xx\\source\\go\\depolyment\\cfg\\login.cfg / c:\\users\\xx\\source\\go\\depolyment\\cfg"
    args := strings.split(cmdstr, " ")
    cmd := exec.command(args[0], args[1:]...)
    cmd.stdout = os.stdout
    cmd.stderr = os.stderr
    cmd.run()

我尝试了很多方法,输出总是为空,例如:

cmd.Output()
cmd.CombinOutput()
io.Pipe()

谁能帮我解决这个问题,谢谢!


正确答案


来自 ncftpput 的手册页:

与许多命令(例如 grepls 及其彩色输出)一样,ncftpput 尝试检测它是否在终端中运行,并据此更改其默认输出。

在 shell 中:尝试运行 ncftpput ... > /tmp/output && cat /tmp/outputncftpput ... | cat 来查看当 stdout 不是终端时的输出(剧透:它可能是空的)。

exec.Command 上下文中运行的命令不在终端上下文中运行(其输出不是 tty)。

在使用 ncftpoutput 的特定用例中,如果您希望在所有情况下都输出进度表:只需将 -v 添加到您的命令中即可。

理论要掌握,实操不能落!以上关于《golang exec命令输出为空》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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