通过subprocess.call()执行ping时获取错误

时间:2014-04-05 07:41:38

标签: python subprocess ping

我已经给出了

subprocess.call(['ping', '127.0.0.1', '>>', 'out15.txt'])
python脚本中的

语句。

但是我收到了未知的主机错误。

请让我知道为什么我会收到这个错误。

2 个答案:

答案 0 :(得分:0)

因为您将>> out15.txt作为参数传递给ping。 >>是cmd \ bash的特殊字符。如果你坚持使用命令将输出重定向到文件,而是使用python代码,你可以这样做:

subprocess.call(['cmd', '/c', 'ping', '127.0.0.1', '>>', 'out15.txt'])

bash也一样。

答案 1 :(得分:0)

由于@Ori Seri pointed out >>通常由shell解释:

from subprocess import call

call('ping 127.0.0.1 >> out15.txt', shell=True)

注意:字符串参数为shell=True

你可以在没有shell的情况下做到这一点:

with open('out15.txt', 'ab', 0) as output_file:
    call(["ping", "127.0.0.1"], stdout=output_file)

注意:list参数带有shell=False(默认值)。

您无需编写输出文件来解释ping结果;你可以改用退出状态:

from subprocess import call, DEVNULL

ip = "127.0.0.1"
rc = call(["ping", '-c', '3', ip], stdout=DEVNULL)
if rc == 0:
    print('%s active' % ip)
elif rc == 2:
    print('%s no response' % ip)
else:
    print('%s error' % ip)

请参阅Multiple ping script in Python