如何在使用子进程调用命令后隐藏返回代码?
from netaddr import IPNetwork
import subprocess
for ip in IPNetwork('1.1.1.1/19'):
print subprocess.call(["host", str(ip)]
如果我随后将其传输到文件中,我会获得主机+ ip,但每行后返回代码为0。
答案 0 :(得分:0)
subprocess.call返回返回代码,您正在查看它,因为您正在打印它。另一个输出正从主程序打印到stdout,因为它没有从subprocess.call方法重定向。
如果你想捕捉你正在调用的过程的输出,你应该看一下Popen的沟通方法
答案 1 :(得分:0)
以下是有关如何捕获stdout
和stderr
的示例。
>>> 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模块,因此我无法告诉您它是否有效。