这个问题已经在这里有一个答案:
- 如何阅读一子的标准输出的第一个字节,然后丢弃其余的在Python? 2个回答
我从我的Python脚本调用Java程序,它输出了很多无用的信息,我不想。 我曾尝试addind stdout=None
到POPEN功能:
subprocess.Popen(['java', '-jar', 'foo.jar'], stdout=None)
但它确实是相同的。 任何的想法?
这个问题已经在这里有一个答案:
我从我的Python脚本调用Java程序,它输出了很多无用的信息,我不想。 我曾尝试addind stdout=None
到POPEN功能:
subprocess.Popen(['java', '-jar', 'foo.jar'], stdout=None)
但它确实是相同的。 任何的想法?
从3.3的文档 :
标准输入,输出和错误指定执行的程序的标准输入,标准输出和标准误差的文件句柄,分别。 有效值是PIPE,DEVNULL,现有的文件描述符(正整数),现有的文件对象,和无。
所以:
subprocess.check_call(['java', '-jar', 'foo.jar'], stdout=subprocess.DEVNULL)
这种只存在于3.3及更高版本。 但文件说:
DEVNULL表明特殊文件os.devnull将被使用。
而os.devnull
存在的方式回到2.4(前subprocess
存在)。 所以,你可以手动做同样的事情:
with open(os.devnull, 'w') as devnull:
subprocess.check_call(['java', '-jar', 'foo.jar'], stdout=devnull)
请注意,如果你正在做的事情更加复杂,不适合到一个单一的线,你需要保持devnull
开放的整个生命Popen
对象,而不仅仅是它的建设。 (也就是说,把整个事情里面with
说明。)
重定向到的优点/dev/null
(POSIX)或NUL:
(Windows)中是不创建不必要的管道,而且,更重要的是,不能碰到边缘情况下,在写入该管的子块。
它的缺点是,在理论上, subprocess
可能会在一些平台上工作os.devnull
没有。 如果你只关心对CPython的POSIX和Windows,PyPy和Jython(这是你最),这将永远不会成为一个问题。 对于其他情况,之前发布的测试代码。
从文档 :
随着默认设置
None
,则不会发生重定向。
您需要设置stdout
到subprocess.PIPE
,然后调用.communicate()
并简单地忽略捕获的输出。
p = subprocess.Popen(['java', '-jar', 'foo.jar'], stdout=subprocess.PIPE)
p.communicate()
虽然我怀疑使用subprocess.call()
超过您的需求就足够了:
subprocess.call(['java', '-jar', 'foo.jar'], stdout=subprocess.PIPE)