先前使用python寫了程式後用PyInstaller編譯成exe
內容主要是使用while監看另一部機器的狀態
不過啟動後約2天左右會沒有報錯就默默的關閉
請問這可能是哪方面有問題呢?
python版本為3.8.4
PyInstaller版本為3.6
這邊分享一個我個人愛用的error log方式(使用traceback模組)給樓主參考:
from traceback import extract_tb
from sys import exc_info,exit
from datetime import datetime
if __name__ == "__main__":
try:
#這裡放入程式碼
QWERASDFQWERASDF
except Exception as e:
error_class = e.__class__.__name__ #取得錯誤類型
detail = e.args[0] #取得詳細內容
cl, exc, tb = exc_info() #取得Call Stack
lastCallStack = extract_tb(tb)[-1] #取得Call Stack的最後一筆資料
fileName = lastCallStack[0] #取得發生的檔案名稱
lineNum = lastCallStack[1] #取得發生的行號
funcName = lastCallStack[2] #取得發生的函數名稱
errMsg = "File \"{}\", line {}, in {}: [{}] {}".format(fileName, lineNum, funcName, error_class, detail)
with open('runtime_error.log','a+',encoding='utf-8') as f:
f.writelines(datetime.now().strftime("%Y-%m-%d %H:%M:%S")+'\t'+errMsg+'\n')
print(errMsg)
exit(0)
以上面的例子來說直接執行它會將錯誤內容記錄到runtime_reeor.log,內容如下:
2021-01-11 10:55:32 File "C:\Users\demo\err_report_demo.py", line 8, in <module>: [NameError] name 'QWERASDFQWERASDF' is not defined
我故意寫了QWERASDFQWERASDF 在裡面讓它出錯。
你的問題真的是需要通靈才有辦法找。
一般可以先從事件記錄那邊先查原因。
畢竟你是exe,所以還可以推測是跑在windows系統才對。
以下列幾個可能性讓你去查看。
1.作業系統本身的問題:
一般這是run在windows「非server」系列才容易發生,認真來說。這一直是windows系統的通病。
因為這在其它的exe也是會發生的。
2.程式內有不正常的變數記憶方式,或變數資源累加未正常釋放掉
這可能你先追蹤一天看看,先注意該應用的記憶體使用量。會不會一直持續增加。
因為記憶用量到程式崩潰的可能性還是會有的。
3.安全因素?
這是很早期曾經碰過的。但這個不好說明,就先跳過了。
一般會建議長期跑的東西,最好還是註冊成服務的應用。
會比較安全不怕被中斷。
如果不會的話,也可以利用一下計劃任務來幫你做安全檢測重啟處理。
盯一下是不是有MemoryLeak的問題,打開工作管理員,跑個半天看看,看記憶體是不是愈吃愈兇,如果有而你不想改或不知怎麼下手,可以讓程式重新啟動自己
os.system(r'yourpy.exe')
#結束目前的程式