首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >subprocess.run:把check=True和stdout=PIPE结合起来安全吗?

subprocess.run:把check=True和stdout=PIPE结合起来安全吗?
EN

Stack Overflow用户
提问于 2015-10-22 19:42:12
回答 1查看 5.6K关注 0票数 3

Python3.5引入了模块作为新推荐的高级子进程调用方法。

在三种较老的(可用的自Python 2.5 / 2.7以来)高级API函数中,有check_call()。那个Python3.5文档索赔check_call()

..。相当于: 运行(.,check=True)

该文档还警告不要将subprocess.PIPE作为stdoutstderr传递给check_call()

备注 不要在此函数中使用stdout=PIPEstderr=PIPE。如果子进程生成足够多的输出到管道以填充OS管道缓冲区,则子进程将被阻塞,因为管道不是从中读取的。

由于它是“等价的”,此警告是否也适用于run(..., check=True),即应该

代码语言:javascript
复制
subprocess.run(..., stdout=subprocess.PIPE, check=True)

代码语言:javascript
复制
subprocess.run(..., stderr=subprocess.PIPE, check=True)

也被回避了?( run()没有提到这个警告。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)是有效的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33289362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档