在我的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()
但它不起作用。我现在能想到的唯一解决方案是创建另一个管道,并通过它复制输入文件,但必须有一个简单的方法。
答案 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()