如何从扩展名为 .pyw 的 Python 脚本打印到标准输出?

发布于 2024-12-11 20:19:37 字数 474 浏览 0 评论 0原文

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

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

那么如何使用 pythonw 为 GUI 应用程序重新启用 stdout 呢?

最小工作示例:

# test.py
print "hello"

执行:

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

提前感谢您的任何建议!

I have a python program with a wxpython GUI and some command line parameters. I generate a single windows executable with py2exe. I don't want to have a command line window in the background, so py2exe is making this a pythonw executable without this window. This is equivalent to use the *.pyw extension.

The problem is, if you want to see the available command line arguments, you naturally do "main.exe -h" on a shell. Even though argparse is providing this information, it doesn't reach stdout because of the *.pyw extension.

So how could I re-enable stdout for a GUI application using pythonw?

minimal working example:

# test.py
print "hello"

execution:

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

Thanks in advance for any suggestion!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

如果没有你 2024-12-18 20:19:37

我这样做的一种方法是使用 py2exe 的 custom-boot-script 重定向sys.stdout 到文件。

当我可以挖掘它时,我将在这里提供一些示例代码,但请查看链接以帮助您开始。

One way I've done this is use py2exe's custom-boot-script to redirect sys.stdout to a file when a certain command line switch is present.

I'll have some sample code here when I can dig it up, but check the link out to get you started.

若相惜即相离 2024-12-18 20:19:37

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

app = wx.App(True)

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

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

You can tell wxPython's App instance to redirect too. Just set the "redirect" parameter to True:

app = wx.App(True)

Another solution would be to use Python's logging module instead of relying on printing strings to stdout. Using that, you can log to a file or to various web protocols, among others. See the documentation for full details: http://docs.python.org/library/logging.html

There's also a good introductory tutorial here: http://www.doughellmann.com/PyMOTW/logging/

慈悲佛祖 2024-12-18 20:19:37

我终于用某种令人讨厌的伎俩解决了我的问题。我从 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,但这目前有效。
感谢所有建议!

I finally solved my problem with some kind of a nasty trick. I get the help information from argparse like that:

class Parser(object):
    def __init__(self):
        [...init argparser...]
        self.help = ""
        self.__argparser.print_help(self)
    def write(self, message):
        self.help += message

Then I just show the help information in the about dialog.

I would still prefer to re-enable sys.stdout, but this works for now.
Thanks to all suggestions!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文