我正在尝试编写一个python脚本来执行一个命令行程序,其中包含从另一个文件导入的参数。该程序的命令行界面如下: ./executable.x参数(a)参数(b)参数(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)...
脚本调用程序,但它不传递变量。我错过了什么?
答案 0 :(得分:1)
你想:
line=f.readline()
subprocess.Popen([program]+line.split())
您目前拥有的内容会将整行作为单个参数传递给程序。 (比如在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())
答案 1 :(得分:0)
首先,对于你的情况,使用subprocess.call()而不是subprocess.popen()
至于“没有被传递的参数”,你的剧本中没有任何明显的错误。尝试将整个事物连接成长字符串并将字符串赋予.call()而不是list。
subprocess.call( program + " " + " ".join(line) )
您确定line
包含您希望其包含的数据吗?
要确保(如果源文件很短),请尝试明确地将文件转换为列表,并确保“line”中有数据:
for line in file.readlines():
if len(line.trim().split(" ")) < 2:
raise Exception("Where are my params?")