Go 作为另一个用户执行

Go 作为另一个用户执行,go,exec,Go,Exec,如何在GO中与另一个用户一起执行shell命令,并从中获得输出 我试过: cmd :=exec.Command("sudo","su",username, "-c",command) stdout, err := cmd.StdoutPipe() CheckErr(err) cmd.Run() 没有输出。有人知道怎么做吗?您需要检查运行cmd的输出。运行并使用stdout获得输出比使用管道更简单 cmd :=exec.Command("sudo","su",username, "-c",com

如何在GO中与另一个用户一起执行shell命令,并从中获得输出

我试过:

cmd :=exec.Command("sudo","su",username, "-c",command)
stdout, err := cmd.StdoutPipe()
CheckErr(err)
cmd.Run()

没有输出。有人知道怎么做吗?

您需要检查运行cmd的输出。运行并使用stdout获得输出比使用管道更简单

cmd :=exec.Command("sudo","su",username, "-c",command)
cmd.Stderr = os.Stdout
cmd.Stdout = os.Stdout

err := cmd.Run()
CheckErr(err)

这应该可以让您看到错误,以便您可以找出阻止sudo的原因。

您的用户是否允许在没有密码的情况下执行
sudo
?是的,用户(用户名和运行程序的用户)都在sudoer列表中,而sudoer列表中的用户通常是不够的。您通常仍然需要提供密码。在编程方面,这通常需要设置
--prompt
--stdin
选项。这是一个进步,但不幸的是,我现在对
sudo
的理解不够深入。如果您在shell中键入该命令,该命令是否有效?我刚刚阅读了手册页(),我想知道它在进程中运行时是否无法获取用户用户名的密码?@miltonb:sudo有
-S
选项在stdin上获取密码。