通过subprocess.call()执行ping时出现错误
我在我的Python脚本中写了
subprocess.call(['ping', '127.0.0.1', '>>', 'out15.txt'])
这段代码。
但是我遇到了一个“未知主机”的错误。
请告诉我,为什么会出现这个错误。
2 个回答
0
正如@Ori Seri 提到的,>>
通常是由一个命令行工具(叫做shell)来解释的:
from subprocess import call
call('ping 127.0.0.1 >> out15.txt', shell=True)
注意:这里的字符串参数是用 shell=True
。
你也可以不使用命令行工具来做这件事:
with open('out15.txt', 'ab', 0) as output_file:
call(["ping", "127.0.0.1"], stdout=output_file)
注意:这里的列表参数是用 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)
可以参考Python中的多个ping脚本。
0
因为你把 >> out15.txt
作为参数传给了 ping 命令。>>
是 cmd 或 bash 中的一个特殊符号。如果你想用命令把输出重定向到文件,而不是用 Python 代码,你可以这样做:
subprocess.call(['cmd', '/c', 'ping', '127.0.0.1', '>>', 'out15.txt'])
在 bash 中也是一样的。