2

在我的 Python 代码中,我有

executable_filepath = '/home/user/executable'
input_filepath = '/home/user/file.in'

我想分析我会从命令中获得的输出

/home/user/executable </home/user/file.in

我试过了

command = executable_filepath + ' <' + input_filepath
p = subprocess.Popen([command], stdout=subprocess.PIPE)
p.wait()
output = p.stdout.read()

但它不起作用。我现在能想到的唯一解决方案是创建另一个管道,并通过它复制输入文件,但必须有一个简单的方法。

4

2 回答 2

6
from subprocess import check_output

with open("/home/user/file.in", "rb") as file:
    output = check_output(["/home/user/executable"], stdin=file)
于 2013-05-21T14:54:17.587 回答
0

您需要shell=True在调用中指定Popen. 默认情况下,[command]直接传递给exec家族中的系统调用,它不理解 shell 重定向操作符。

或者,您可以让Popen进程连接到文件:

with open(input_filepath, 'r') as input_fh:
    p = subprocess.Popen( [executable_filepath], stdout=subprocess.PIPE, stdin=input_fh)
    p.wait()
    output=p.stdout.read()
于 2013-05-21T14:38:53.053 回答