Python Popen subprocess.PIPE及其使用

Python Popen subprocess.PIPE及其使用,python,subprocess,popen,Python,Subprocess,Popen,我知道这个问题可能被问了很多,但我仍然没有真正理解它。 通过阅读这篇相关文章,我可以理解为什么需要在句子末尾添加stdout=subprocess.PIPE,以便将输出结果用于下一个Popen 我试着在网上查找,但我几乎没有得到任何关于它的知识,因为我找到的都是以文档的形式存在的 但是,如果我不使用输出,是否真的需要将stdout=subprocess.PIPE放在末尾? 我试着在使用和不使用它的情况下执行它,它仍然给了我想要的预期结果 因此,无论是否存在subprocess.PIPE,最大的区

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

我试着在网上查找,但我几乎没有得到任何关于它的知识,因为我找到的都是以文档的形式存在的

但是,如果我不使用输出,是否真的需要将
stdout=subprocess.PIPE
放在末尾? 我试着在使用和不使用它的情况下执行它,它仍然给了我想要的预期结果

因此,无论是否存在
subprocess.PIPE
,最大的区别是什么

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

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


可以粘贴输出吗?

如果不读取/写入相应的管道,则应不使用
子流程管道。如果相应的OS管道缓冲区已满,则可能会暂停子进程

如果您希望(或传递输入)作为字符串(变量)或只调用
子流程,请使用
subprocess.PIPE

如果要将
process.stdout
作为stdin传递给另一个进程(to),请使用
subprocess.PIPE


如果你想忽略输出;你可以。您可以将其重定向到一个文件(或任何具有有效
.fileno()
例如)中。

我使用的是Python 2.7,请纠正我的错误,即使我尝试了这个简单的示例
process=subprocess.Popen(['echo',Hello World!',stdout=subprocess.PIPE)]
,如您所述,区别在于
None
打印输出之间的差异。但我还是得到了结果
helloworld
printed,这不被视为输出吗?如果没有subprocess.PIPE,您将无法在变量中获取命令返回的输出。这就是区别。有点像打印“Hello World”和返回“Hello World”Ok谢谢。。。我还是有点‘不服气’?或者更确切地说,无法看到逻辑是如何工作的。。。威尔试图在“Hello World”和“return”两个例子中看到它让我再试一次:假设在python脚本中,您必须将“ps aux”(shell命令)的输出写入一个文件。文件写入部分必须在python中,而不是在shell中,因此您需要在一个变量中输入“ps aux”的结果,您可以使用该变量执行file.write(var)。为此,必须设置STDOUT-->subprocess.PIPE