我正在尝试将以下命令的输出通过管道传输到 /dev/null,这样就不会为运行该程序的用户打印它。
import os
os.system("ping -c 1 192.168.unknown.host > /dev/null")
但是我得到了错误:
ping: unknown host 192.168.unknown.host
问题是这条消息是由stdout以外的东西产生的,可能是stderr,我可以很容易地将它重定向到/dev/null 使用
ping -c 1 192.168.unknown.host >& /dev/null
但是,当我在 python 中使用它时,出现以下错误:
sh: 1: Syntax error: Bad fd number
有没有可能解决这个问题? (我只是不想打印该消息)。
请您参考如下方法:
import subprocess
subprocess.Popen(
['ping', "-c", "192.168.unknown.host"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
正如 Ashwini Chaudhary 所指出的,对于低于 3.3 的 Python,您必须手动打开 os.devnull:
import os
import subprocess
with open(os.devnull, 'w') as DEVNULL:
subprocess.Popen(
['ping', "-c", "192.168.unknown.host"],
stdout=DEVNULL,
stderr=DEVNULL,
)
