2013-11-04 30 views
0

桑達我從shell中運行的工作是:與Python/subprocess.call桑達:我怎樣才能使Python執行該調用sed的

sed -re 's/(::\s+ni\s+=)[^=]*$/\1 512/' test.dat 

但是,我不能讓它使用Python的子進程運行。撥打:

我有以下幾點:

infile = 'test.dat' 
cmd= [ 
     "sed", 
     "-re", 
     "s/(::\s+ni\s+=)[^=]*$/\1 512/", 
     infile 
    ] 
subprocess.call(cmd, stdout=open('out_test.dat','w')) 

我試過很多不同的方式,但我總是得到一個非零退出狀態。

+0

是不是因爲你的正則表達式應該包含雙引號單引號,即'「的/(:: \ S + NI \ s + =)[^ = ] * $/\ 1 512 /'「'? – wflynny

+0

你需要逃避你的斜槓。 –

+1

爲什麼不使用Python的內置正則表達式替換功能? – tripleee

回答

4

問題是,Python字符串"s/(::\s+ni\s+=)[^=]*$/\1 512/"包含一個control-A,您想要一個反斜槓和一個1.每當您將正則表達式編寫爲字符串文字時,您希望儘可能使用原始字符串,或者跳過反斜槓如果不。所以,只要把上面一行:

r"s/(::\s+ni\s+=)[^=]*$/\1 512/",