golang 执行系统命令 ps aux | grep "xxxx",总是异常退出
导致这个问题的原因是管道符 |
不能写在 exec.Command()
中,要分开执行两条命令。方法如下
func Demo() (err error) {
psCmd := exec.Command("ps", "aux")
psStdout, psStderr := SetCommandStd(psCmd)
err = psCmd.Run()
if err != nil {
err = errors.New(err.Error() + psStderr.String())
return
}
// 筛选
grepCmd := exec.Command("grep", "mysql")
grepCmd.Stdin = psStdout
grepStdout, grepStderr := SetCommandStd(grepCmd)
err = grepCmd.Run()
if err != nil {
err = errors.New(err.Error() + grepStderr.String())
return
}
}
func SetCommandStd(cmd *exec.Cmd) (stdout, stderr *bytes.Buffer) {
stdout = &bytes.Buffer{}
stderr = &bytes.Buffer{}
cmd.Stdout = stdout
cmd.Stderr = stderr
return
}
楼下回答有正解
本作品采用《CC 协议》,转载必须注明作者和本文链接
不是吧 如果多几个过滤,岂不好多重复代码
@lovecn 如果你有更好的 记得回我哦
async
sync
For more