将python中的参数传递给c可执行文件

时间:2016-03-07 14:46:57

标签: python

我有一个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个选项。

任何帮助将不胜感激,提前谢谢。

1 个答案:

答案 0 :(得分:1)

在读取输出之前,您不能wait()查看子进程; wait等待子进程终止,但子进程被阻止写入其输出! subprocess.check_output简化了对流程的stdout的阅读,因此您可以将Popenwaitread替换为

output = subprocess.check_output(['./avg', 'one.dat', '1', '1', '-1']) 

args = ("./avg","one.dat","1","1","-1")(或上面的列表)是正确的方法;每个参数都需要是可迭代的单独元素。