我能在pythonw中获取"print"语句的输出吗?

5 投票
4 回答
4670 浏览
提问于 2025-04-16 03:54

pythonw.exe没有控制台,所以我看不到print的输出。但是我的程序在python.exe里运行正常,在pythonw.exe里却失败了。我只是想看到python解释器的日志和我用“print”语句打印的日志,这能做到吗?

4 个回答

1

你可以把打印出来的内容输出到任何地方。比如说:

logfile = open("logfile.txt", "w")
print >>logfile, "This is a log test"

不过大多数情况下,使用Python自带的日志功能会更合适,这个功能在logging模块里。

2

你可以把输出重定向到任何一个有 .write 方法的类。比如,我把 sys.stdout 和 sys.stderr 都重定向到一个类,这个类会把结果写到一个富文本框里,正常的输出是黑色的,错误信息是红色的。

logControl = None
def LogWrite(text, color):
    logControl.SetDefaultStyle(wx.TextAttr(color, wx.NullColour))
    logControl.WriteText(text)

class RedirectStdOut:
    def write(self,string):
        LogWrite(string, "BLACK")

class RedirectStdErr:
    def write(self,string):
        LogWrite(string, "RED")

....

    sys.stdout = RedirectStdOut()
    sys.stderr = RedirectStdErr()

在这个例子中,logControl 只是一个指向富文本框的引用,我可以假设这个文本框是存在的。你可以同时写入这个控件和一个文件,或者重定向到 dbgview,基本上你想怎么做都可以。

7

你可以通过给 sys.stdout 赋值来全局重定向输出内容:

import sys
sys.stdout = open("mylog.txt", "w")

这样你程序中所有的输出,包括打印语句,都会被写入到 mylog.txt 文件里。

撰写回答