我正在使用Python的subprocess.call
(此处为文档),我对标准输出有一个问题。
我有以下命令:
subprocess.call("wget http://google.com", shell=True)
它工作得很好,但它打印wget的输出,所以我得到了大量的wget输出,比如:
--2013-06-28 08:54:47-- http://google.com/
Resolving google.com... 173.194.41.100, 173.194.41.98, 173.194.41.97, ...
Connecting to google.com|173.194.41.100|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
.... etc
如何更改呼叫,使其仅在出现错误时打印任何内容?
我试过研究子流程文档,但我觉得我太缺乏经验了,无法自己弄清楚。
实际上,我认为最简单的方法是使用"wget"的"-q"选项。您仍然可以通过查看返回值来发现错误。
wget
通常会在stderr上报告所有输出,因此重定向stdout仅对获取错误没有帮助。
您可以使用-nv
(非详细)或-q
(安静)作为wget的选项,不同之处在于-q
甚至不报告错误,而-nv
向stderr报告错误或单个成功行。
返回代码在这两种情况下都是不变的,所以如果您喜欢的话,可以使用它来检测任何错误。
编辑:如果你真的只是想忽略wget的所有输出,你可以将stderr
和stdout
重定向到一个空设备;
import subprocess
import os
DEVNULL = open(os.devnull, 'wb')
subprocess.call("wget http://google.com/", stdout=DEVNULL, stderr=DEVNULL, shell=True)
在我的Python 3.3.1安装中,DEVNULL可以从子流程导入,但我找不到关于它添加到哪个版本的文档。以上内容在Python2和Python3中都适用。