2012-08-22 208 views
0

使用引號我想爲下面的代碼行然而,這得到一個錯誤:蟒蛇:在subprocess.popen

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) 

仍然出錯。任何幫助,這是讚賞。

回答

4

子過程優先選擇程序及其參數的字符串列表。嘗試

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

self.sysdate = 2012年8月25日2時50分〇〇秒 錯誤: 文件 「date.py」,第12行,在changedatelinux P = subprocess.Popen( '/ bin中/日期',' -s','%s'%self.sysdate) 文件「/usr/lib64/python2.6/subprocess.py」,第589行,在__init__中 raise TypeError(「bufsize必須是整數」) TypeError: bufsize必須是整數 – user1618238

+0

您忘記將參數放入列表中......在它們周圍添加'[]'。 –

+0

它是一個字符串,我將它傳遞給構造函數作爲日期('2012年8月25日2:50:00') – user1618238

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)