python:在subprocess.popen中使用引号

时间:2012-08-22 21:54:23

标签: python subprocess

我正在尝试这个,但是后续代码行出错:

p = subprocess.Popen(r"/bin/date -s "%s" " % self.sysdate)

错误:

  File "date.py", line 12
    p = subprocess.Popen(r"/bin/date -s "%s" " % self.sysdate)
                                             ^
SyntaxError: invalid syntax

我也尝试过:

p = subprocess.Popen(r'/bin/date -s "%s" ' % self.sysdate)

仍然出错。对此有任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

Subprocess更喜欢程序及其参数的字符串列表。尝试

subprocess.Popen(['/bin/date', '-s', '%s' % self.sysdate])

答案 1 :(得分:0)

您将子进程Popen args作为字符串列表发送。而且当你分割字符串时,使用像shlex.split这样的模块函数。

>>> date_str = '/bin/date -s "%s"' % '%HH:%MM'
>>> date_str
'/bin/date -s "%HH:%MM"'
>>> import shlex
>>> vals = shlex.split(date_str)
>>> vals
['/bin/date', '-s', '%HH:%MM']
>>> p = subprocess.Popen(vals)