2011-05-18 20 views
4

下面是一個Python腳本,其中一些命令的執行復制的可執行文件,然後執行它的相關代碼:爲什麼我的腳本在調用.EXE後停止執行命令?

exe_file_path = os.getcwd() + r'\name_of_executable.exe' 
temp_loc = os.environ['temp'] 

subprocess.Popen(r'copy %s %s' % (exe_file_path, temp_loc), shell=True) 
exe_file_path = os.environ['temp'] + r'\name_of_executable.exe' 
subprocess.Popen(r'start %s' % (exe_file_path), shell=True) 
subprocess.Popen(r'del %s' % (exe_file_path), shell=True) 

目前,僅name_of_executable.exe打印出的文本,然後調用system("pause")

暫停執行後,我推enter,我會認爲可執行文件會關閉,Python腳本會繼續,但Python的最後一行不會執行。

這是因爲我使用TEMP文件夾? (我是從命令提示符下運行以管理員身份運行。如何讓腳本工作?

+1

請注意,您也可以使用'shutil'軟件包來處理文件複製/移動/刪除操作。 – 2011-05-18 17:45:50

回答

6

所有程序都將被立即開始一個接一個。每個POPEN對象調用communicate等待程序終止。

此外,您的格式字符串的使用是不必要的危險。['copy', exe_file_path, temp_loc]自動轉義任何奇怪的字符在exe_file_pathtemp_loc(和更容易閱讀)。

順便說一下,Python有複印很好的功能和刪除文件shutilos;有n o需要爲此調用shell程序。

而不是連接字符串以確定exe_file_path,您應該使用os.path.join(儘管這並不重要,因爲您的程序似乎鎖定到Windows)。

+0

我注意到它們確實都是一個接一個地開始的,但是,在每行添加'.communicate()'並不能解決問題。我是否需要將返回的輸出和錯誤放入變量中以便發生該「效應」?現在編輯格式字符串..謝謝。 – 2011-05-18 17:51:28

+0

感謝您的Python技巧。很顯然,這種語言是新手。 – 2011-05-18 17:54:46

+0

@josmh請注意,start會在生成新進程後立即返回。只要刪除開始(完整的ine將是'subprocess.Popen([exe_file_path])。溝通()'和使用shutil/os函數爲另外兩個調用。 – phihag 2011-05-18 17:55:00

相關問題