Popen子进程.PIPE及其用法
我知道这个问题可能被问过很多次,但我还是不太明白。通过阅读这个相关的链接,我明白了为什么在句子的末尾需要加上stdout=subprocess.PIPE
,这样输出的结果才能传递给下一个Popen。
我试着在网上查找,但几乎没有找到有用的信息,因为我找到的都是一些文档。
但是如果我不使用输出,真的有必要在末尾加上stdout=subprocess.PIPE
吗?我尝试过有和没有这个参数的情况,结果都是我想要的。
那么,subprocess.PIPE
在有和没有的情况下,具体有什么大区别呢?
process = subprocess.Popen(command, stdout=subprocess.PIPE)
process.communicate()
2 个回答
3
如果你不打算读写对应的管道,那就不要使用subprocess.PIPE
。因为如果操作系统的管道缓冲区满了,可能会导致子进程停滞不前。
如果你想要获取子进程的输出(或者传入输入),可以使用subprocess.PIPE
,这样可以把输出作为字符串(变量)获取,或者直接调用subprocess.check_output()
,这个函数会为你处理这些事情。
如果你想把process.stdout
作为输入传递给另一个进程(就像在命令行中使用a | b
的效果),也可以使用subprocess.PIPE
。
如果你想忽略输出,可以把它重定向到DEVNULL。你也可以把输出重定向到一个文件(或者任何有有效.fileno()
的东西,比如Unix上的套接字)。
7
如果不使用 subprocess.PIPE,命令的输出会直接显示在标准输出(STDOUT)上,而 process.communicate() 方法会返回 None。你用的是哪个版本的 Python?
能把输出结果贴出来吗?