Python子进程调用,带有多个引用的参数

时间:2011-12-20 19:56:11

标签: python subprocess

我在bash中使用以下命令来执行Python脚本。

python myfile.py -c "'USA'" -g "'CA'" -0 "'2011-10-13'" -1 "'2011-10-27'"

我正在编写一个Python脚本来包装这个。我目前不得不使用os.system(我知道,这很糟糕),因为我无法弄清楚如何使用subprocess.Popen获取引号。必须在传入的字符串变量中维护内部单引号。

有人可以帮我确定如何格式化传递给subprocess.Popen的第一个变量。

3 个答案:

答案 0 :(得分:8)

您无需转义值。对于该过程,所有内容都以字符串形式传递。

您可以使用shlex模块找出传递变量的最佳方法:

import shlex
shlex.split('python myfile.py -c "USA" -g "CA" -0 "2011-10-13" -1 "2011-10-27"') 
['python',
 'myfile.py',
 '-c',
 'USA',
 '-g',
 'CA',
 '-0',
 '2011-10-13',
 '-1',
 '2011-10-27']

答案 1 :(得分:4)

即使使用带引号的参数,您也应该可以使用subprocess.Popen启动脚本:

subprocess.Popen([
   "/usr/bin/python", 
   "myfile.py",
   "-c",
   "'USA'",
   "-g",
   "'CA'",
   "-0",
   "'2011-10-13'",
   "-1",
   "'2011-10-27'",
])

答案 2 :(得分:0)

你试过这个吗?

import subprocess
subprocess.Popen(['python', 'myfile.py', '-c', "'USA'", '-g', "'CA'", '-0', "'2011-10-13'", -1, "'2011-10-27'"]).communicate()

您可以在myfile.py中使用此功能来检查bash获得的内容与subprocess.Popen获得的内容相同(在我的情况下匹配):

import sys
print sys.argv