簡體   English   中英

從python運行另一個程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM