在Python中将字符串变量的值传递给Popen函数的正确方法是什么?我尝试了下面的代码
var1 = 'hello'
var2 = 'universe'
p=Popen('/usr/bin/python /apps/sample.py ' + '"' + str(eval('var1')) + ' ' + '"' + str(eval('var2')), shell=True)
,在sample.py中,下面是代码
print sys.argv[1]
print '\n'
print sys.argv[2]
但它会输出以下输出
hello universe
none
因此它将var1和var2都视为一个参数。这是将字符串变量的值作为参数传递的正确方法吗?
答案 0 :(得分:1)
这应该有效:
p = Popen('/usr/bin/python /apps/sample.py {} {}'.format(var1, var2), shell=True)
其次,将参数传递给脚本有其怪癖:http://docs.python.org/2/library/subprocess.html#subprocess.Popen
这对我有用:
test.py:
#!/usr/bin/env python
import sys
print sys.argv[1]
print '\n'
print sys.argv[2]
然后:
chmod +x test.py
然后:
Python 2.7.4 (default, Jul 5 2013, 08:21:57)
>>> from subprocess import Popen
>>> p = Popen('./test.py {} {}'.format('hello', 'universe'), shell=True)
>>> hello
universe
答案 1 :(得分:0)
var1 = 'hello'
var2 = 'universe'
p=Popen("/usr/bin/python /apps/sample.py %s %s"%(str(eval('var1')), str(eval('var2'))), shell=True)
传递格式说明符是很好的方法。