隐藏subprocess.call的返回代码

1 投票
3 回答
1946 浏览
提问于 2025-04-18 08:37

我该如何在使用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

这里有一个例子,教你怎么捕获 stdoutstderr 的输出。

>>> 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 方法。

撰写回答