Python运行ping并获取退出代码

时间:2014-02-06 13:52:02

标签: python ping

我试图通过python脚本ping一个主机,并捕获ping的输出和退出代码。为此,我提出了以下python片段:

ping_command = "ping -c 5 -n -W 4 " + IP
ping_process = os.popen(ping_command)
ping_output = ping_process.read()
exit_code_ping = ping_process.close()
exit_code = os.WEXITSTATUS(exit_code_ping)
print ping_output
print exit_code

我观察到如果具有给定IP的主机关闭或无法访问,则代码可以正常工作。但是,如果主机已经启动,它会给我:

exit_code = os.WEXITSTATUS(exit_code_ping)
TypeError: an integer is required

因为我在python中很初学,所以我不知道这里有什么问题。

问题:我做错了什么,为什么这件事不起作用......最重要的是,我怎样才能让它发挥作用。

2 个答案:

答案 0 :(得分:3)

顺便说一句,你可以通过放入try块来修复你的代码片段,当成功时exitcode是None:

try:
    exit_code = os.WEXITSTATUS(exit_code_ping)
    print exit_code
except Exception as er:
    print 'Error: ', er

print ping_output

更好的方法是使用子流程:

import subprocess

IP = '8.8.8.100'
ping_command = "ping -c 5 -n -W 4 " + IP

(output, error) = subprocess.Popen(ping_command,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE,
                                   shell=True).communicate()

print output, error

答案 1 :(得分:0)

使用subprocess.模块,查看此excellent piece of documentation about subprocess

Popen.returncode正是您要找的......

How to get exit code when using Python subprocess communicate method?