python脚本从命令行运行,但使用子进程会出错

时间:2013-06-19 16:43:02

标签: python subprocess

以下命令行有效并提供正确的结果

$ python maps2.py -i=/media/babak/LaCie/necessary/visualisation/CMIP3_Babak/Temperature/bccr_bcm2_0 -o=temp/CMIP3 -p=temp_001

但是当调用确切的命令时,使用以下子进程模块:

run=subprocess.Popen([sys.executable, 'maps2.py -i=/media/babak/LaCie/necessary/visualisation/CMIP3_Babak/Temperature/bccr_bcm2_0 -o=temp/CMIP3 -p=temp_001' ])

它出现以下错误:

/usr/bin/python: can't open file 'maps2.py -i=/media/babak/LaCie/necessary/visualisation/CMIP3_Babak/Temperature/bccr_bcm2_0 -o=temp/CMIP3 -p=temp_001': [Errno 2] No such file or directory

原因是什么?命令完全相同。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

使用subprocess.Popen()时,第一个参数应该是一个列表,其中包含您要运行的流程的每个参数的单独条目:

run=subprocess.Popen([sys.executable, 'maps2.py', '-i=/media/babak/LaCie/necessary/visualisation/CMIP3_Babak/Temperature/bccr_bcm2_0', '-o=temp/CMIP3', '-p=temp_001' ])

您目前拥有的内容相当于在命令行上运行以下命令:

python 'maps2.py -i=/media/babak/LaCie/necessary/visualisation/CMIP3_Babak/Temperature/bccr_bcm2_0 -o=temp/CMIP3 -p=temp_001'

答案 1 :(得分:1)

除了F.J.的回答,您可以轻松地从shlex.split

的参数中拆分可执行文件的名称
mapsCommand = 'maps2.py -i=/media/babak/LaCie/necessary/visualisation/CMIP3_Babak/Temperature/bccr_bcm2_0 -o=temp/CMIP3 -p=temp_001'
fullCommand = [sys.executable]
fullCommand.extend(shlex.split(mapsCommand))
run=subprocess.Popen(fullCommand)