簡體   English   中英

如何從擴展名為.pyw的Python腳本打印到stdout?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM