我試圖從Python中稱之爲「的sed」和有麻煩經由任一subprocess.check_call通過命令行()或使用os.system() 。傳遞外殼命令與Python使用os.system()或subprocess.check_call()
我在Windows 7中,但使用從Cygwin的(它的路徑)「的sed」。
如果我這樣做從Cygwin的外殼,它工作正常:
$ sed 's/&nbsp;/\ /g' <"C:foobar" >"C:foobar.temp"
在Python中,我已經得到了完整路徑,我在「名稱」工作。我想:
command = r"sed 's/&nbsp;/\ /g' " + "<" '\"' + name + '\" >' '\"' + name + '.temp' + '\"'
subprocess.check_call(command, shell=True)
所有級聯是有,以確保我身邊的輸入和輸出文件名雙引號(如果有在Windows文件路徑空格)。
我也嘗試過用替換最後一行:
os.system(command)
無論哪種方式,我得到這個錯誤:
sed: -e expression #1, char 2: unterminated `s' command
'amp' is not recognized as an internal or external command,
operable program or batch file.
'nbsp' is not recognized as an internal or external command,
operable program or batch file.
然而,正如我所說,它的工作原理確定從控制檯。我究竟做錯了什麼?
我可以建議您完全跳過sed,並將其作爲四行Python腳本編寫嗎? – 2012-07-24 01:49:46
你不能在迭代器中使用像'<' or '>'這樣的shell結構,因爲'check_call'只是引用它們。你必須把它們組合成一個字符串......但是聽奈德......他知道他的東西。 – 2012-07-24 01:53:34