【发布时间】:2012-08-03 12:35:16
【问题描述】:
我已经阅读了关于 subprocess.Popen 的所有内容,但我认为我遗漏了一些东西。
我需要能够执行一个 unix 程序,该程序从 python 脚本中创建的列表中读取数据流,并将该程序的结果写入文件。在 bash 提示符下,我一直这样做没有问题,但现在我试图从一个 python 脚本中执行此操作,该脚本在进入这个阶段之前预处理了一些二进制文件和大量数据。
让我们看一个不包括所有预处理的简单示例:
import sys
from pylab import *
from subprocess import *
from shlex import split
# some arbitrary x,y points
points = [(11,31),(13,33),(15,37),(16,35),(17,38),(18,39.55)]
commandline = 'my_unix_prog option1 option2 .... > outfile'
command = split(commandline)
process = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
print process.communicate(str(points))
这在 bash 中的执行方式是:
echo "11 31
13 33
15 37
16 35
17 38
18 39.55" | my_unix_prog option1 option2 .... > outfile
将数据输入 unix prog 的方式也很重要,我应该格式化为 2 列,用空格分隔。
感谢任何帮助...
【问题讨论】:
-
在
command中,您将输出重定向到outfile,但随后您尝试使用communicate将其读入您的程序。您希望输出到哪里? -
使用 '>' 不是将输出重定向到文件的方法,请参阅此答案:stackoverflow.com/questions/8902206/…
标签: python subprocess external-process piping