我對Python完全陌生,但我正在努力學習。子流程缺少輸出文件
我想使用subprocess命令來運行一個模擬程序,我可以在終端中在bash環境中調用該程序。語法非常簡單: 命令inputfile.in 其中命令是tcltk環境中的一個更大的仿真腳本。
好吧我已經讀了很多python文獻,並決定使用subprocess命令的Popen功能。
所以,從我的理解,我應該能夠格式化命令如下:
p= subprocess.Popen(['command','inputfile.in'],stdout= subprocess.PIPE])
print(p.communicate())
此命令的輸出是兩個文件。當我在終端中運行命令時,我在與原始輸入文件相同的目錄中得到兩個文件。
File1.fid File2.spe.
當我使用Popen時,有兩件事讓我困惑。 (1)我沒有得到任何輸出文件寫入輸入文件的目錄。 (2)值p.communicate存在,表示模擬已運行。
輸出文件會發生什麼情況。有沒有一種特定的方式來調用一個命令函數來產生文件?
我在for循環裏面的Jupyter筆記本單元中運行它。這個for循環用於迭代地改變輸入文件,從而系統地改變模擬條件。我的操作系統是mac osx。
目標是在for循環的每次迭代中模擬或運行命令,然後將輸出文件數據存儲在較大的字典中。之後,我想在優化過程中將輸出文件數據與實驗數據進行迭代比較,以最大限度地減少殘差。
我將不勝感激任何幫助。如果popen不是正確的python函數,也是任何方向。
用'P = subprocess.Popen([ 'inputfile.in' 命令',],標準錯誤= subprocess.PIPE,標準輸出=子再試一次。 PIPE,stdout = subprocess.PIPE)'。 – swatchai
,從子進程,文件「」,第2行 p = subprocess.Popen(['/ usr/local/bin/simpson',fileName],stdout = subprocess。 PIPE,stdout = subprocess.PIPE) SyntaxError:重複的關鍵字參數 –
witheve
對不起,我的錯誤。我有'stdout = subprocess.PIPE'兩次。 – swatchai