9

我有一个带有 wxpython GUI 和一些命令行参数的 python 程序。我用 py2exe 生成了一个单一的 windows 可执行文件。我不想在后台有一个命令行窗口,所以 py2exe 使它成为一个没有这个窗口的 pythonw 可执行文件。这相当于使用 *.pyw 扩展名。

问题是,如果您想查看可用的命令行参数,您自然会在 shell 上执行“main.exe -h”。尽管 argparse 提供了这些信息,但由于 *.pyw 扩展名,它不会到达标准输出。

那么如何使用 pythonw 为 GUI 应用程序重新启用标准输出呢?

最小的工作示例:

# test.py
print "hello"

执行:

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

提前感谢您的任何建议!

4

3 回答 3

3

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

然后我只在关于对话框中显示帮助信息。

我仍然希望重新启用sys.stdout,但这暂时有效。感谢所有建议!

于 2012-02-09T16:32:07.497 回答