[英]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.