在subprocess.Popen中使用大于运算符

时间:2014-07-15 21:38:12

标签: 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="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'是我要处理的日志文件的名称。最后一行(从countpostprocesser ...开始)失败。

2 个答案:

答案 0 :(得分:2)

您的呼叫失败,因为重定向运算符作为参数传递给您的脚本,而shell没有将您的输出重定向到文件。请参阅Popen documentation

This answer to another SO question显示了打开文件,然后将子进程的输出重定向到文件的一个很好的示例。

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

答案 1 :(得分:1)

使用shell=True的{​​{1}}标记。

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