我知道这个问题可能已被问过很多,但我仍然没有真正得到它。
从这个相关的link读取,我可以理解为什么需要在句子的末尾添加stdout=subprocess.PIPE
,以便输出结果可以用于下一个Popen。
尝试在线查看,但我对它的了解很少,因为我发现的是文档形式。
但如果我不使用输出,是否真的有必要将stdout=subprocess.PIPE
放在最后?
我尝试使用和不使用它来执行它,它仍然给我我想要的预期结果。
因此subprocess.PIPE
是否存在有什么重大区别?
process = subprocess.Popen(command, stdout=subprocess.PIPE)
process.communicate()
答案 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)。