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

时间:2015-05-14 03:32:03

标签: python popen

我对发生的事情感到有些困惑。我想计算返回多少行来查看进程是否正在运行。我正在使用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)

文档说inform会返回一个元组(stdoutdata,stderrdata)。为什么它返回1然后(无,无)?如何抑制(无,无)行/消息?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

  

请注意,如果要将数据发送到进程的stdin,则需要创建   带有stdin = PIPE的Popen对象。同样,获得其他任何东西   在结果元组中,你需要给出stdout = PIPE和/或   stderr = PIPE也是

答案 2 :(得分:0)

1是您的流程的输出(在这种情况下为wc -l)。因此,您的打印声明正在生成(None, None) - 如果您不想要,请不要打印它。