[英]How to print to stdout from Python script with .pyw extension?
我有一個帶有wxpython GUI和一些命令行參數的python程序。 我用py2exe生成一個單獨的Windows可執行文件。 我不想在后台有一個命令行窗口,所以py2exe使這個沒有這個窗口的pythonw可執行文件。 這相當於使用* .pyw擴展名。
問題是,如果你想看到可用的命令行參數,你自然會在shell上執行“main.exe -h”。 即使argparse提供此信息,由於* .pyw擴展名,它也無法到達stdout。
那么如何使用pythonw為GUI應用程序重新啟用stdout?
最小的工作范例:
# test.py
print "hello"
執行:
#> python test.py
hello
#> pythonw test.py
#>
提前感謝任何建議!
我這樣做的一種方法是使用py2exe的custom-boot-script在存在某個命令行開關時將sys.stdout
重定向到文件。
當我可以挖掘它時,我會在這里有一些示例代碼,但請檢查鏈接以幫助您入門。
你也可以告訴wxPython的App實例重定向。 只需將“redirect”參數設置為True即可:
app = wx.App(True)
另一個解決方案是使用Python的日志記錄模塊,而不是依賴於打印字符串到stdout。 使用它,您可以登錄到文件或各種Web協議等。 有關完整詳細信息,請參閱文檔: http : //docs.python.org/library/logging.html
這里還有一個很好的入門教程: http : //www.doughellmann.com/PyMOTW/logging/
我終於通過一些討厭的伎倆解決了我的問題。 我從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
,但現在這樣做。 感謝所有的建議!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.