How to print to stdout from Python script with .pyw extension?

痞子三分冷 提交于 2019-12-06 21:52:26

问题


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!


回答1:


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.




回答2:


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/




回答3:


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!



来源:https://stackoverflow.com/questions/7883214/how-to-print-to-stdout-from-python-script-with-pyw-extension

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!