6

py2exeでエラーをより適切に処理する方法を見つけようとしています。基本的に2つの奇妙なことが起こっています:

1)プログラムをシャットダウンした後のポップアップメッセージ=>このポップアップを抑制(表示しない)したい

2) ログ ファイルが c:\Program Files\AppName\AppName.exe.log に作成されます (このフォルダーへの書き込み権限エラーが発生する場合があります) => ログを c:\ProgramData にリダイレクトします

コードを間違った場所に配置しているだけで、これらを設定した後に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()
4

2 に答える 2

4

古い投稿ですが、それでも誰かが便利だと思うかもしれません。ロガーの伝播を設定することで、この迷惑なポップアップウィンドウを無効にすることができます

logger.propagate = False

その理由は、ロガーが出力をコンソールに伝搬しないためです。詳細については、py2exe パッケージのソース コードを確認してください。

py2exe\boot_common.py
于 2014-04-25T12:17:42.177 に答える
1

ファイルの先頭で s の1 つがimport間違っているという問題がありました。py2exe が望んでいた方法でログが作成されないように、ファイルの先頭に stdout/stderr リダイレクトを配置する必要がありました。

于 2014-07-24T16:24:42.707 に答える