隐藏subprocess.call的返回码

时间:2014-06-04 19:48:25

标签: python

如何在使用子进程调用命令后隐藏返回代码?

from netaddr import IPNetwork
import subprocess

for ip in IPNetwork('1.1.1.1/19'):
        print subprocess.call(["host", str(ip)]

如果我随后将其传输到文件中,我会获得主机+ ip,但每行后返回代码为0。

3 个答案:

答案 0 :(得分:0)

subprocess.call返回返回代码,您正在查看它,因为您正在打印它。另一个输出正从主程序打印到stdout,因为它没有从subprocess.call方法重定向。

如果你想捕捉你正在调用的过程的输出,你应该看一下Popen的沟通方法

答案 1 :(得分:0)

以下是有关如何捕获stdoutstderr的示例。

>>> proc = subprocess.Popen(['ls', '-alh', '/tmp/foo'],
...                          stdout=subprocess.PIPE, 
...                          stderr=subprocess.PIPE, 
...                          shell=False)
>>> 
>>> stdout, stderr = proc.communicate()
>>> proc.returncode
0

答案 2 :(得分:0)

现在可能已经超级死了,但是因为我正在研究这个问题,所以我加了两美分。

我的想法与我必须封装在印刷品中的方式相同。我也得到了错误标准输出以及每行之后的0退出代码(标准错误)。

当我从print语句中删除它时,它删除了退出代码(标准错误),但仍然打印了标准输出(命令的输出)。

试试这个:

from netaddr import IPNetwork
import subprocess

for ip in IPNetwork('1.1.1.1/19'):
    subprocess.call(["host", str(ip)])

我没有安装netaddr模块,因此我无法告诉您它是否有效。