9

wxpython GUI といくつかのコマンド ライン パラメーターを備えた python プログラムがあります。py2exe で単一の Windows 実行可能ファイルを生成します。バックグラウンドでコマンド ライン ウィンドウを表示したくないので、py2exe はこのウィンドウなしでこれを pythonw 実行可能ファイルにしています。これは、*.pyw 拡張子を使用するのと同じです。

問題は、利用可能なコマンド ライン引数を確認したい場合は、当然シェルで "main.exe -h" を実行することです。argparse はこの情報を提供していますが、拡張子が *.pyw であるため、stdout には到達しません。

では、pythonw を使用して GUI アプリケーションの stdout を再度有効にするにはどうすればよいでしょうか?

最小限の作業例:

# test.py
print "hello"

実行:

#> python test.py
hello
#> pythonw test.py
#> 

提案をお寄せいただきありがとうございます!

4

3 に答える 3

3

これを行った 1 つの方法は、特定のコマンド ライン スイッチが存在する場合に、py2exe のcustom-boot-scriptsys.stdoutを使用してファイルにリダイレクトすることです。

掘り下げられるようになったら、ここにいくつかのサンプル コードを用意しますが、開始するにはリンクをチェックしてください。

于 2011-10-24T23:53:08.797 に答える
1

wxPython の App インスタンスにもリダイレクトするように指示できます。「リダイレクト」パラメーターを True に設定するだけです。

app = wx.App(True)

別の解決策は、標準出力への文字列の出力に依存する代わりに、Python のロギング モジュールを使用することです。これを使用して、ファイルやさまざまな Web プロトコルなどにログを記録できます。詳細については、ドキュメントを参照してください: http://docs.python.org/library/logging.html

ここにも優れた入門チュートリアルがあります: http://www.doughellmann.com/PyMOTW/logging/

于 2011-10-25T13:56:26.623 に答える
0

私は最終的にある種の厄介なトリックで問題を解決しました。次のように argparse からヘルプ情報を取得します。

class Parser(object):
    def __init__(self):
        [...init argparser...]
        self.help = ""
        self.__argparser.print_help(self)
    def write(self, message):
        self.help += message

次に、about ダイアログにヘルプ情報を表示します。

もう一度有効にしたいのですがsys.stdout、今のところこれで問題ありません。すべての提案に感謝します!

于 2012-02-09T16:32:07.497 に答える