py2exeでエラーをより適切に処理する方法を見つけようとしています。基本的に2つの奇妙なことが起こっています:
1)プログラムをシャットダウンした後のポップアップメッセージ=>このポップアップを抑制(表示しない)したい
- try/except を使用 => は機能しません
- http://osdir.com/ml/python.py2exe/2006-09/msg00016.html
- このコードをどこに置くべきかわからない
2) ログ ファイルが c:\Program Files\AppName\AppName.exe.log に作成されます (このフォルダーへの書き込み権限エラーが発生する場合があります) => ログを c:\ProgramData にリダイレクトします
- sys.stdout と sys.stderr を使用 => 機能しない
コードを間違った場所に配置しているだけで、これらを設定した後にpy2exeブートストラップコードが起動していると思いますが、よくわかりません。エラーログが生成される直前にこのコードを配置しようとしましたが、それでもpy2exeがそれらをブートストラップしている場所(StdErrオブジェクト)に移動します
私のプログラムの構造は次のとおりです
src/
python/
gui/
__main__.py
メイン.py
if __name__ == "__main__":
# Redirect py2exe log to somewhere else if windows
if hasattr(sys,"frozen") and sys.frozen in ("windows_exe", "console_exe"):
stdout_file = "c:\ProgramData\AppName\out.log"
stderr_file = "c:\ProgramData\AppName\err.log"
sys.stdout = open(stdout_file, "w")
sys.stderr = open(stderr_file, "w")
try:
gui = AppNameGui()
gui.main()
except:
traceback.print_exc()