如何在python中将命令的输出传递给`/ dev/null`

ore*_*ani 1 python bash stderr

我试图管道以下命令的输出,/dev/null以便它不会为运行该程序的用户打印.

import os
os.system("ping -c 1 192.168.unknown.host > /dev/null")
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

ping: unknown host  192.168.unknown.host
Run Code Online (Sandbox Code Playgroud)

问题是这个消息是由其他东西产生的stdout,可能stderr我可以很容易地将它重定向到/dev/null使用

ping -c 1 192.168.unknown.host >& /dev/null
Run Code Online (Sandbox Code Playgroud)

但是,当我在python中使用它时,我收到以下错误:

sh: 1: Syntax error: Bad fd number
Run Code Online (Sandbox Code Playgroud)

有可能解决这个问题吗?(我只是不希望打印这条消息).

Bar*_*ski 7

import subprocess

subprocess.Popen(
    ['ping', "-c", "192.168.unknown.host"],
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL,
)
Run Code Online (Sandbox Code Playgroud)

正如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,
    )
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`subprocess.DEVNULL`仅适用于Python 3.3+,对于早期版本,您必须使用`open(os.devnull)`返回的对象. (2认同)