1

我正在尝试编写一个 python 脚本来执行带有从另一个文件导入的参数的命令行程序。该程序的命令行界面工作方式如下: ./executable.x parameter(a) parameter(b) parameter(c) ...

我的代码是:

#program to pass parameters to softsusy
import subprocess
#open parameter file
f = open('test.dat', 'r')
program = './executable.x'
#select line from file and pass to program
for line in f:
    subprocess.Popen([program, line])

test.dat 文件如下所示:

param(a) param(b) param(c)...

该脚本调用该程序,但它不传递变量。我错过了什么?

4

2 回答 2

2

你要:

line=f.readline()
subprocess.Popen([program]+line.split())

您当前拥有的内容会将整行作为单个参数传递给程序。(就像在 shell 中调用它一样program "arg1 arg2 arg3"

当然,如果你想为文件中的每一行调用一次程序:

with open('test.dat','r') as f:
for line in f:
    #you could use shlex.split(line) as well -- that will preserve quotes, etc.
    subprocess.Popen([program]+line.split())
于 2012-06-01T20:16:15.920 回答
0

首先,对于您的情况,使用 subprocess.call() 而不是 subprocess.popen()

至于“未通过参数”,您的脚本中没有任何明显错误。尝试将整个内容连接成长字符串并将字符串提供给 .call() 而不是列表。

subprocess.call( program + " " + " ".join(line) )

您确定它line包含您希望它包含的数据吗?

为了确保,(如果源文件很短)尝试将文件显式转换为列表并确保“行”中有数据:

for line in file.readlines():
    if len(line.trim().split(" ")) < 2:
        raise Exception("Where are my params?")
于 2012-06-01T20:24:37.930 回答