我在bash中使用以下命令来执行Python脚本。
python myfile.py -c "'USA'" -g "'CA'" -0 "'2011-10-13'" -1 "'2011-10-27'"
我正在编写一个Python脚本来包装这个。我目前不得不使用os.system(我知道,这很糟糕),因为我无法弄清楚如何使用subprocess.Popen获取引号。必须在传入的字符串变量中维护内部单引号。
有人可以帮我确定如何格式化传递给subprocess.Popen的第一个变量。
答案 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