2016-03-07 90 views
1

我有一个C-可执行的作品为:传递参数到c可执行

./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

它以什么方式不起作用? –

+0

@PeterWood“可执行文件[抱怨]没有足够的参数传递给可执行文件” –

+0

一旦应用程序编译完成,写入'c'的事实就没有意义。删除标签。 –

回答

1

你不能wait()为子过程之前你读它的输出; wait等子进程终止,但子进程被阻塞写它的输出! subprocess.check_output简化阅读过程的标准输出,这样你就可以

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

而且args = ("./avg","one.dat","1","1","-1")(或如上面的列表)是做正确的方式取代Popenwaitread;每个参数都需要是可迭代的独立元素。

+1

您也可以使用[**'shlex.split' **](https://docs.python.org/2/library/shlex.html#shlex.split)将''./avg one.dat 1 1 -1'到'['./avg','one.dat','1','1','-1']' –