通过subprocess.call()执行ping时出现错误

-1 投票
2 回答
1357 浏览
提问于 2025-04-18 01:27

我在我的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 中也是一样的。

撰写回答