隐藏subprocess.call的返回代码
我该如何在使用subprocess调用命令后隐藏返回代码呢?
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的退出代码(标准错误)。
当我把它从打印语句中去掉后,退出代码(标准错误)就消失了,但标准输出(命令的输出)还是会打印出来。
你可以试试这个:
from netaddr import IPNetwork
import subprocess
for ip in IPNetwork('1.1.1.1/19'):
subprocess.call(["host", str(ip)])
我没有安装netaddr模块,所以无法告诉你它是否有效。
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
0
subprocess.call 会返回一个返回码,你之所以能看到这个返回码,是因为你在打印它。其他的输出是从主程序的标准输出(stdout)打印出来的,因为它没有通过 subprocess.call 方法进行重定向。
如果你想获取你调用的进程的输出,应该看看 Popen 的 communicate 方法。