Python3.5引入了模块作为新推荐的高级子进程调用方法。
在三种较老的(可用的自Python 2.5 / 2.7以来)高级API函数中,有check_call()。那个Python3.5文档索赔,check_call()
..。相当于: 运行(.,check=True)
该文档还警告不要将subprocess.PIPE作为stdout或stderr传递给check_call()。
备注 不要在此函数中使用
stdout=PIPE或stderr=PIPE。如果子进程生成足够多的输出到管道以填充OS管道缓冲区,则子进程将被阻塞,因为管道不是从中读取的。
由于它是“等价的”,此警告是否也适用于run(..., check=True),即应该
subprocess.run(..., stdout=subprocess.PIPE, check=True)和
subprocess.run(..., stderr=subprocess.PIPE, check=True)也被回避了?( run()没有提到这个警告。)
发布于 2015-10-22 19:58:07
把check=True和stdout=PIPE结合起来安全吗?
是的,
不应该使用stdout=PIPE作为subprocess.check_call (或subprocess.call)的参数的原因是,这些实用程序函数不处理进程可能接收/产生的任何输入和输出。如果您希望处理输出,则需要(在实现subprocess.run之前)使用subprocess.check_output,它专门处理输出,在它自己的文件中,该输出声明等效于run(..., check=True, stdout=PIPE).stdout。这清楚地表明subprocess.run(...,check=True,stdout=PIPE)是有效的。
https://stackoverflow.com/questions/33289362
复制相似问题