2012-11-01 44 views
2

我發誓我什麼也沒改變,而且這個工作在一個星期前就開始了。但是現在每次我用os.system或subprocess.call調用路徑時,我都會收到錯誤「錯誤:文件NBK.swn不存在」。python子流程文件不存在

這裏是我的代碼:

import subprocess 
subprocess.call('"H:/2012/yada yada yada/swanrun" NBK') 

爲了得到這個正常運行,我在H打開命令提示符:/ 2012 /亞達內容十分重要/和類型「swanrun NBK」,它工作正常。如果我運行相同的代碼,但最後刪除'NBK',這是swanrun應該運行的文件,swanrun運行成功,但當然不知道要運行哪個文件。請幫忙!

+0

「NBK_local.swn」存在哪個目錄中? –

+0

對不起,這是一個錯字,錯誤是「錯誤:文件NBK.swn不存在」。 NBK.swn存在於H:/ 2012/yada yada yada/ – Matt

回答

1

或者使用的完整路徑"NBK",或設置當前工作目錄:

import subprocess 

path = "H:/2012/yada yada yada/" 
subprocess.call('"H:/2012/yada yada yada/swanrun" NBK', cwd=path) 

編輯: 一般來說,如果一個文件的說法是不是完全限定路徑的應用程序將尋找在其預先定義數據目錄(如果有),可執行文件的目錄,當前工作目錄或與當前工作目錄或可執行文件目錄相關的某個目錄。 cwd選項設置工作目錄,您應該將該目錄設置爲可以按照您的問題所述成功運行「swanrun NBK」的目錄。

+0

不幸的是,這並沒有解決問題(相同的結果)。但是,您正在處理某些問題,因爲我可以確定問題在於它沒有在輸入文件(NBK.swn)的正確位置查找。我最終使用了一種解決方法,使用shutil將輸入文件複製到工作目錄,然後將輸出從工作目錄複製回輸入文件目錄。不優雅,但它的作品。如果任何人有適當的解決方案,我仍然是耳朵!謝謝! – Matt

+0

我剛剛提供了一個示例路徑。將工作目錄更改爲NBK.swn的路徑,或使用文件的完整路徑作爲參數。國際海事組織,複製文件不是一個解決方案。 – eryksun

+0

我確實改變了路徑。事實上,我使用的道路(.../yada yada yada /)是爲了保護我正在工作的隱私。仍然沒有workey(除了我的解決方法,這完成了工作)。謝謝,雖然;如果有人有任何其他建議,仍然感興趣。 – Matt

1

子流程需要一個列表,而不是一個字符串。如果你只提供一個字符串,它將把整個事物當作一個可執行文件的名字來處理,而不是將它分割成空格。它正試圖找到一個名爲「H:/ 2012/yada yada yada/swanrun」的NBK計劃,該計劃將成爲具有該頭銜的文件。而是嘗試使用參數'NBK'加載程序「H:/ 2012/yada/yada yada/swanrun」的subprocess.call(['"H:/2012/yada/yada yada/swanrun"', 'NBK'])