我有一个c-executable,其作用如下:
./avg filename opt1 opt2 opt3
例如:
./avg one.dat 1 1 -1
返回类似
的内容 127.504 2.244375804433813 1.111195552742103 blks: 500
当我尝试从python代码调用它时,我尝试过:
import os
os.system("./avg one.dat 1 1 -1")
以及
import subprocess
#args = ("./avg","one.dat","1","1","-1")
args = ("./avg one.dat 1 1 -1")
popen = subprocess.Popen(args, stdout=subprocess.PIPE)
popen.wait()
output = popen.stdout.read()
print output
两者都不起作用,并且没有足够的参数传递给可执行文件的可执行文件。它应该至少有4个选项。
任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:1)
在读取输出之前,您不能wait()
查看子进程; wait
等待子进程终止,但子进程被阻止写入其输出! subprocess.check_output
简化了对流程的stdout的阅读,因此您可以将Popen
,wait
和read
替换为
output = subprocess.check_output(['./avg', 'one.dat', '1', '1', '-1'])
args = ("./avg","one.dat","1","1","-1")
(或上面的列表)是正确的方法;每个参数都需要是可迭代的单独元素。