我可以在pythonw中获得“print”语句的输出吗?

时间:2010-09-09 07:46:26

标签: python

pythonw.exe没有控制台,所以我看不到print的输出。但是我的程序在python.exe中是OKAY,在pythonw.exe中失败了。我只想查看python解释器的日志和我的“print”语句打印的日志,是否可行?

4 个答案:

答案 0 :(得分:3)

您可以通过分配给sys.stdout来全局重定向stdout:

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

然后程序的其余部分stdout(包括print语句)将转到mylog.txt。

答案 1 :(得分:1)

您可以将print的输出重定向到任何流。例如

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

虽然大部分时间使用logging模块中的python内置日志记录工具更合适。

答案 2 :(得分:0)

您可以将输出重定向到任何实现.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或使用它做任何你想做的事情。

答案 3 :(得分:-1)

我发现一个太长的普通打印语句会导致程序崩溃。您需要重定向输出。 要测试这个想法,请创建一个简单的程序

    import time
    time.sleep(5)

将其另存为test.pyw。当您运行此程序时,它将显示在任务管理器上。 现在通过添加print语句来修改它。该文本文件中有超过100行。

    import time
    string = ''
    filename = 'pathto/text.txt'
    f = open(filename,'r')
    for line in f:
            string = string + ' ' + line
    f.close()
    print string
    time.sleep(5)

程序会崩溃。