python 中 Popen 的这个额外元组是什么?

What is this extra tuple from Popen in python?

我对发生的事情有点困惑。我想计算返回的行数以查看进程是否 运行ning。我正在使用 subprocess.Popen 到 运行 命令,以便我可以获得输出。但是,在测试我的脚本时,我看到了一些我没有指望的额外输出,我只是好奇为什么以及如何抑制它。

这是我的脚本中的一个片段。请原谅我清理它的任何拼写错误。

ssh = subprocess.Popen("ssh " + HOST + " ps -ef | grep jetty | wc -l", stdin=subprocess.PIPE, shell=True)

output = ssh.communicate()
print output

这个脚本的输出是:

1
(None, None)

文档说 returns 传递一个元组(stdoutdata、stderrdata)。为什么返回 1 然后返回 (None, None)?如何抑制 (None, None) line/message?

为了获得对命令标准输出and/or标准错误的引用,你必须传递subprocess.PIPE作为stdoutstderr的值(分别) 关键字参数。否则,在元组中返回值 None。由于您没有为 stdout 指定值,命令的输出将转到 Python 脚本的标准输出,这就是您看到“1”的原因。

1 是您的过程的输出(在本例中为 wc -l)。所以你的打印语句正在生成 (None, None) - 如果你不想要它,就不要打印它。

这是来自文档:subprocess.Popen.communicate

Note that if you want to send data to the process’s stdin, you need to create the Popen object with stdin=PIPE. Similarly, to get anything other than None in the result tuple, you need to give stdout=PIPE and/or stderr=PIPE too