2015-11-26 53 views
0

我最近從python 2.7更改爲python 3.4和anaconda。帶有子進程和Popen的獨立控制檯窗口

我不得不在3.4中對代碼進行一些更改,但遇到了一個問題,我不確定它是否是由新版本的Python或Anaconda本身引起的。

我的轉變之前,我有命令

p=subprocess.Popen('Location of .exe file') 

這工作得很好,因爲它打開了我的.exe文件在不同的窗口/控制檯,我必須提供一些輸入,而Python程序在運行背景。

現在,當我嘗試運行相同的命令時,在單獨的控制檯上,我必須在我的python程序正在運行的同一個控制檯中提供我的輸入。

有什麼辦法讓它迴歸原來的樣子?有人可以向我解釋是什麼原因導致了這種變化?在這個論壇上有一些關於這個問題的建議,但是迄今爲止沒有任何建議。

我很感謝你的幫助

回答

2

簡單地從Python的版本2傳遞到3應該不會有這樣的區別。

我認爲在你的舊Python2.7 environnment,你正在使用Pythonw.exe(注意結尾W¯¯)執行最初的腳本,並在新的Python3您使用Python.exe

兩種版本都存在兩種口味。不同的是,Python.exe是一個控制檯應用程序,而Pythonw.exe是一個GUI之一:

  • 從控制檯啓動時,Python.exe使用其父控制檯,它給它(控制檯)的子進程 - 如果從GUI啓動程序(如資源管理器)時,它將從控制檯啓動時分配一個新的控制檯
  • Pythonw.exe將忽略其父控制檯,並且將爲任何(控制檯)子進程分配新的控制檯。但是如果您嘗試在沒有腳本的情況下執行它,它將立即結束,因爲它沒有標準輸入。

所以只需使用Pythonw來啓動你的腳本,每個子進程都會有一個控制檯

+0

非常感謝你。這正是我所期待的!快速提問。使用pythonw.exe而不是python.exe會有什麼影響或缺點? – Jethro

+0

@Jethro:如果Python腳本是從批處理開始的,那麼使用Python而不是Pythonw是有意義的......另一個問題是當你需要腳本的標準流(輸入,輸出,錯誤)時,只有Python使用它們 –