簡體   English   中英

如何在Python中將命令的輸出傳遞給`/ dev / null`

[英]How to pipe the output of a command to `/dev/null` in python

我正在嘗試將以下命令的輸出傳遞到/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,
    )

您應該看一下Python 子流程模塊。 它提供了幾種可以處理標准輸入,輸出和錯誤的方法。

像這樣:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM