我正在尝试将以下命令的输出传递给/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
有可能解决这个问题吗? (我只是不想要打印这条消息)。
答案 0 :(得分:7)
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,
)
答案 1 :(得分:2)
您应该查看Python subprocess模块。它提供了几种可以处理标准输入,输出和错误的方法。
这样的事情:
import subprocess as sub
import shlex
cmd = "ping -c 1 myhost"
cmdarg = shlex.split(cmd)
p = sub.Popen(cmdarg,stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()