我对发生的事情感到有些困惑。我想计算返回多少行来查看进程是否正在运行。我正在使用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然后(无,无)?如何抑制(无,无)行/消息?
答案 0 :(得分:3)
为了获得对命令的标准输出和/或标准错误的引用,您必须将subprocess.PIPE
作为stdout
和stderr
的值(分别) )关键字参数。否则,在元组中返回值None
。由于您没有为stdout
指定值,因此命令的输出将转到Python脚本的标准输出,这就是您看到" 1"。
答案 1 :(得分:1)
这是来自文件:subprocess.Popen.communicate
请注意,如果要将数据发送到进程的stdin,则需要创建 带有stdin = PIPE的Popen对象。同样,获得其他任何东西 在结果元组中,你需要给出stdout = PIPE和/或 stderr = PIPE也是
答案 2 :(得分:0)
1
是您的流程的输出(在这种情况下为wc -l
)。因此,您的打印声明正在生成(None, None)
- 如果您不想要,请不要打印它。