2015-11-03 44 views
-1

建設我有pyinstaller exe文件後,有時在發生異常時,我可以在GUI中看到一個致命的錯誤:fatalerror imagePyinstaller:如何隱藏致命錯誤GUI在Python

我只是想隱瞞這一點。

PS:我用Pyinstaller與--windowed選項

非常感謝!

+0

你的意思是,'.EXE'文件中使用pyinstaller,生成在執行時發生錯誤產生的?或者你的意思是說,在使用pyinstaller構建'.EXE'的過程中,你會得到上述錯誤? –

+0

它在運行時。的.EXE。 當運行時發生異常時,此窗口顯示出來......但我不希望出現這種情況。 –

+0

然後我認爲你必須編輯python代碼。在代碼中必須有一個地方配置這個異常...找到它並修改異常。 –

回答

1

當您的應用程序有未捕獲的異常時,PyInstaller的啓動/關閉代碼顯示此對話框。抑制它的最好方法是在Python代碼中捕獲異常並正常退出應用程序(通過調用sys.exit()或提高SystemExit)。這可以通過圍繞main()的頂級try...catch或圍繞啓動事件循環的調用完成。

我還建議創建一個GUI對話框,在文本框中顯示致命異常的回溯,以方便用戶向您報告錯誤。

0

我有一個涉及subprocess.Popen的根本原因類似的問題,如果你不使用這個函數(或類似的東西),那麼這個答案不太可能有幫助。

我有一個類似的問題,試圖用pyinstaller構建我的.exe。我正在使用--noconsole標誌以及--onefile標誌與pyinstaller並得到「致命錯誤!」消息「返回-1」,每當我試圖執行結果.exe文件。我的.exe會用--onefile標誌建立工作,但是使用--noconsole標誌的任何組合都會返回錯誤,導致我相信這是我的問題的根源。

一個小挖之後,我找到了這樣的回答:

Python subprocess.call() fails when using pythonw.exe

這似乎表明該問題使用subprocess.Popen與pythonw.exe代替python.exe時使用的管道。對於我來說,使用--noconsole標誌的pyinstaller在構建.exe時會使用pythonw.exe而不是python.exe,這對我來說似乎合乎邏輯,這使得我相信這可能適用於我的問題。

爲了測試這個我通過代碼重構來輸出我的Subprocess.Popen調用結果到文件,然後讀入並刪除文件。這解決了我的「致命錯誤!」問題和其他一切進展良好。

原文:

process = subprocess.Popen('cmd /c whoami', stdout=subprocess.PIPE) 
user = process.communicate()[0].decode('ascii').strip() 

重構:

pro = subprocess.Popen('cmd /c whoami > "{0}"'.format(file_name)) 
pro.wait() 
with open(file_name, 'rt') as file: 
    user = file.read().strip() 
os.remove(file_name)