我有一个带有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
#>
提前感谢任何建议!
答案 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
,但这暂时有效。
感谢所有建议!