Popen subprocess.PIPE及其用途

时间:2014-07-18 06:50:05

标签: python subprocess popen

我知道这个问题可能已被问过很多,但我仍然没有真正得到它。 从这个相关的link读取,我可以理解为什么需要在句子的末尾添加stdout=subprocess.PIPE,以便输出结果可以用于下一个Popen。

尝试在线查看,但我对它的了解很少,因为我发现的是文档形式。

但如果我不使用输出,是否真的有必要将stdout=subprocess.PIPE放在最后? 我尝试使用和不使用它来执行它,它仍然给我我想要的预期结果。

因此subprocess.PIPE是否存在有什么重大区别?

process = subprocess.Popen(command, stdout=subprocess.PIPE)
process.communicate()

2 个答案:

答案 0 :(得分:2)

如果没有subprocess.PIPE,命令输出将打印在STDOUT上,process.communicate()应返回None。 您使用的是哪个python版本?

可以粘贴输出吗?

答案 1 :(得分:1)

如果您不读取/写入相应的管道,则应使用subprocess.PIPE。如果相应的OS管道缓冲区填满,它可能会停止子进程。

如果您想get the output of the child process(或传递输入)作为字符串(变量),或者只是在内部调用subprocess.PIPE,请使用subprocess.check_output()

如果您想将subprocess.PIPE作为stdin传递给另一个进程(emulate a | b shell command),请使用process.stdout

如果你想忽略输出;你可以redirect it to DEVNULL。您可以将其重定向到文件(或具有有效.fileno()的任何内容,例如sockets on Unix)。