Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python中的参数传递给c可执行文件_Python - Fatal编程技术网

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

将python中的参数传递给c可执行文件,python,Python,我有一个c-可执行文件,其工作原理如下: ./avg filename opt1 opt2 opt3 例如: 返回类似于 127.504 2.244375804433813 1.111195552742103 blks: 500 当我尝试从python代码调用此函数时,我尝试了: import os os.system("./avg one.dat 1 1 -1") 以及 import subprocess #args = ("./avg","

我有一个c-可执行文件,其工作原理如下:

./avg filename opt1 opt2 opt3 
例如:

返回类似于

 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个选项

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

在读取子流程的输出之前,您不能等待()<代码>等待等待子进程终止,但子进程写入其输出时被阻止<代码>子进程。检查输出简化了进程的读取标准,因此您可以将
Popen
wait
read
替换为

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

args=(“/avg”、“one.dat”、“1”、“1”、“1”、“-1”)
(或上面的列表)是正确的方法;每个参数必须是iterable中的独立元素。

它以什么方式不工作?@PeterWood“可执行文件[抱怨]没有足够的参数传递给可执行文件”一旦应用程序被编译,它是用
c
编写的事实就毫无意义了。正在删除标记。可能是可执行文件有问题。请将args设置为元组(“./avg”、“one.dat”、“1”、“1”和“-1”)。Popen希望参数作为iterable中的独立元素,而不是字符串中的空格。您还可以使用它将
'./avg one.dat 1 1-1'
转换为
['./avg',one.dat',1',1','.-1']
output = subprocess.check_output(['./avg', 'one.dat', '1', '1', '-1'])