我试图通过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中很初学,所以我不知道这里有什么问题。
问题:我做错了什么,为什么这件事不起作用......最重要的是,我怎样才能让它发挥作用。
答案 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?