Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对subprocess.Popen使用大于运算符_Python_Python 2.7_Subprocess_Popen - Fatal编程技术网

Python 对subprocess.Popen使用大于运算符

Python 对subprocess.Popen使用大于运算符,python,python-2.7,subprocess,popen,Python,Python 2.7,Subprocess,Popen,我想使用大于运算符将python脚本的输出重定向到文件。我有以下代码,这是不能正常工作。有人能帮我吗 proc= subprocess.Popen(['python', 'countmapper.py',file],cwd="C:\pythonPrograms\\",stdout=subprocess.PIPE, stderr=subprocess.STDOUT) countReducer= subprocess.Popen(['python', 'countreducer.py'],cwd="

我想使用大于运算符将python脚本的输出重定向到文件。我有以下代码,这是不能正常工作。有人能帮我吗

proc= subprocess.Popen(['python', 'countmapper.py',file],cwd="C:\pythonPrograms\\",stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
countReducer= subprocess.Popen(['python', 'countreducer.py'],cwd="C:\pythonPrograms\\",stdout=subprocess.PIPE,stdin=proc.stdout, stderr=subprocess.STDOUT)
countpostprocesser= subprocess.Popen(['python','countpostprocesser.py','>','output.json'],cwd="C:\pythonPrograms\\",stdout=subprocess.PIPE,stdin=countReducer.stdout,stderr=subprocess.STDOUT)

“file”是我要处理的日志文件的名称。最后一行(以CountPostProcessor…)失败。

使用
Popen的
shell=True
标志


此外,正如我在评论中提到的,您的任务可以简单而优雅地使用。

使用
Popen的
shell=True
标志


此外,正如我在评论中提到的,您的任务可以简单而优雅地使用。

使用
Popen的
shell=True
标志


此外,正如我在评论中提到的,您的任务可以简单而优雅地使用。

使用
Popen的
shell=True
标志


此外,正如我在评论中提到的,您的任务可以简单而优雅地使用来完成。

您的调用失败,因为重定向操作符作为参数传递给脚本,而不是由shell操作以将输出重定向到文件。看

显示了一个打开文件,然后将子流程的输出重定向到该文件的良好示例


另外,正如shx2在另一个答案中提到的,将shell=True参数传递给Popen构造函数也应该完成您所寻找的任务。它将导致进程在自己的shell中打开,从而允许shell程序解释您传递的参数。不过,请注意Popen文档中的一条重要行:“如果shell为True,建议将参数作为字符串而不是序列传递。”

您的调用失败,因为重定向操作符作为参数传递给脚本,而不是由shell操作以将输出重定向到文件。看

显示了一个打开文件,然后将子流程的输出重定向到该文件的良好示例


另外,正如shx2在另一个答案中提到的,将shell=True参数传递给Popen构造函数也应该完成您所寻找的任务。它将导致进程在自己的shell中打开,从而允许shell程序解释您传递的参数。不过,请注意Popen文档中的一条重要行:“如果shell为True,建议将参数作为字符串而不是序列传递。”

您的调用失败,因为重定向操作符作为参数传递给脚本,而不是由shell操作以将输出重定向到文件。看

显示了一个打开文件,然后将子流程的输出重定向到该文件的良好示例


另外,正如shx2在另一个答案中提到的,将shell=True参数传递给Popen构造函数也应该完成您所寻找的任务。它将导致进程在自己的shell中打开,从而允许shell程序解释您传递的参数。不过,请注意Popen文档中的一条重要行:“如果shell为True,建议将参数作为字符串而不是序列传递。”

您的调用失败,因为重定向操作符作为参数传递给脚本,而不是由shell操作以将输出重定向到文件。看

显示了一个打开文件,然后将子流程的输出重定向到该文件的良好示例



另外,正如shx2在另一个答案中提到的,将shell=True参数传递给Popen构造函数也应该完成您所寻找的任务。它将导致进程在自己的shell中打开,从而允许shell程序解释您传递的参数。请注意Popen文档中的一行重要内容:“如果shell为True,建议将参数作为字符串而不是序列传递。”

如果您的实际脚本是python,则更好的解决方案可能是多处理模块。@deets…您能详细说明一下吗?deets,请将注释字段用于注释,而不是答案。这是完美的@Alexi的印象是,不回答实际问题(通过管道连接进程),而是建议一种完全不同的方法实际上是发表评论的地方?如果您的实际脚本是python,一个更好的解决方案可能是多处理模块。@deets…您能详细说明一下吗?deets,请使用注释字段进行注释,而不是回答。这是完美的@Alexi的印象是,不回答实际问题(通过管道连接进程),而是建议一种完全不同的方法实际上是发表评论的地方?如果您的实际脚本是python,一个更好的解决方案可能是多处理模块。@deets…您能详细说明一下吗?deets,请使用注释字段进行注释,而不是回答。这是完美的@Alexi的印象是,不回答实际问题(通过管道连接进程),而是建议一种完全不同的方法实际上是发表评论的地方?如果您的实际脚本是python,一个更好的解决方案可能是多处理模块。@deets…您能详细说明一下吗?deets,请使用注释字段进行注释,而不是回答。这是完美的@Alexi的印象是,不回答实际问题(通过管道连接进程),而是建议一种完全不同的方法,这实际上是评论的地方?我尝试了这个方法,但最终的“output.json”文件被破坏了。破坏意味着什么?输出文件已损坏,无法打开,或者包含胡言乱语?我注意到您使用的是*.json扩展名,因此您是否在子流程中使用编码对输出进行编码,然后无法在其他脚本中解码输出