[英]Running Another program from python
我想從python代碼多次調用一個程序,並將該程序的輸出保存在文本文件中。 現在,我的第一個問題就是調用其他代碼。 我必須重定向到其他目錄,並在output.txt上調用./rank。 我正在嘗試這樣做:
TheCommand = "~/src/rank-8-9-2011/rank output.txt"
os.system(TheCommand)
但即時通訊收到解析錯誤。
[Parsing error on line ]Unknown error: 0
我在Mac OS 10.5.8上運行python2.7。 我不確定是什么問題。 我也嘗試使用子過程:
subprocess.call(["~/src/rank-8-9-2011/rank", "output.txt"])
這找不到目錄(我有一種不正確的感覺,我在使用子進程),但是我不知道os.system出了什么問題。
subprocess.Popen
的第一個參數中的程序名稱,不得包含~
因為它不會將字符串傳遞給外殼程序進行處理(就像在sql中始終使用參數化查詢一樣,它可以防止字符串注入攻擊,例如的output.text
一個有;rm -rf /
,系統版本將運行rank
,然后運行rm -rf .
但subprocess.Popen
只會有rank
打開一個文件名為;rm -rf .
),所以應該將其展開通過調用os.path.expanduser
:
subprocess.Popen([os.path.expanduser('~/src/rank-8-9-2011/rank'), "output.txt"])
盡管可以通過傳遞shell=True
來打開Shell處理,但是由於上述原因,不建議這樣做。
您應該嘗試http://docs.python.org/library/os.path.html#os.path.expanduser
import os.path
subprocess.call([os.path.expanduser("~/src/rank-8-9-2011/rank"), "output.txt"])
我相當確定您的解析錯誤是來自rank
,而不是來自os.system命令的,因為那里似乎沒有什么奇怪的。 如果您手動運行rank
怎樣?
subprocess
似乎與“〜”有問題,盡管我不確定為什么。 放置完整路徑,它應該可以工作(盡管如果rank
確實存在問題,您可能會遇到該解析錯誤)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.