Skip to main content
 首页 » 编程设计

python之如何在 python 中将命令的输出通过管道传输到 `/dev/null`

2025年05月04日10飞鱼

我正在尝试将以下命令的输出通过管道传输到 /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, 
    )