如何从扩展名为.pyw的Python脚本打印到stdout?

时间:2011-10-24 23:44:47

标签: python windows wxpython stdout pythonw

我有一个带有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
#> 

提前感谢任何建议!

3 个答案:

答案 0 :(得分:3)

我这样做的一种方法是使用py2exe的custom-boot-script在存在某个命令行开关时将sys.stdout重定向到文件。

我可以在这里搜索一些示例代码,但是请检查链接以便开始使用。

答案 1 :(得分:1)

您也可以告诉wxPython的App实例重定向。只需将“redirect”参数设置为True:

app = wx.App(True)

另一种解决方案是使用Python的日志记录模块,而不是依赖于将字符串打印到stdout。使用它,您可以登录到文件或各种Web协议等。有关完整详细信息,请参阅文档:http://docs.python.org/library/logging.html

这里还有一个很好的入门教程:http://www.doughellmann.com/PyMOTW/logging/

答案 2 :(得分: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,但这暂时有效。 感谢所有建议!

相关问题