在python中执行shell命令,文件为stdin

时间:2013-05-21 14:07:29

标签: python shell pipe

在我的Python代码中,我有

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

我想从命令

分析我在shell中得到的输出
/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()

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

2 个答案:

答案 0 :(得分:4)

from subprocess import check_output

with open("/home/user/file.in", "rb") as file:
    output = check_output(["/home/user/executable"], stdin=file)

答案 1 :(得分: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()