時呼籲蟒子我試圖篩選是通過一個函數在Python腳本生成的文件:錯誤重定向標準輸出
out = subprocess.check_output(["sed","-n","'s/pattern/&/p'",oldFile,">",newFile])
但是,我得到了我的命令followong錯誤:
returned non-zero exit status 1
有什麼不對?
時呼籲蟒子我試圖篩選是通過一個函數在Python腳本生成的文件:錯誤重定向標準輸出
out = subprocess.check_output(["sed","-n","'s/pattern/&/p'",oldFile,">",newFile])
但是,我得到了我的命令followong錯誤:
returned non-zero exit status 1
有什麼不對?
正如devnull所述,>
由shell解釋。既然是better to avoid using shell=True
,使用stdout
參數,而不是:
import subprocess
with open(newFile, 'w') as newFile:
subprocess.check_call(
["sed", "-n", "s/S/&/p", oldFile], stdout=newFile)
您使用>
重定向,這需要一個shell來解釋語法。
當您重定向sed
的輸出時,這裏沒有意義的是使用check_output
。改爲使用subprocess.call()
或subprocess.check_call()
並驗證返回碼。
既可以通過外殼運行命令:
import pipes
out = subprocess.call("sed -n 's/S/&/p' {} > {}".format(
pipes.quote(oldFile), pipes.quote(newFile), shell=True)
或使用管道:
with open(newFile, 'w') as pipetarget:
out = subprocess.call(["sed", "-n", "s/S/&/p", oldFile],
stdout=pipetarget)
注意的是,由於單獨的參數使用時,你不應該在's/S/&/p'
字符串中使用引號參數列表;當不將它傳遞給shell時,它不需要從shell解析中逃脫。
重定向操作符由shell解釋。 – devnull