pythonw.exe没有控制台,所以我看不到print的输出。但是我的程序在python.exe中是OKAY,在pythonw.exe中失败了。我只想查看python解释器的日志和我的“print”语句打印的日志,是否可行?
答案 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)
程序会崩溃。