2010-09-09 84 views
3

pythonw.exe沒有控制檯,所以我看不到打印輸出。但是我的程序在python.exe中是OKAY,在pythonw.exe中失敗了。我只想看看python解釋器的日誌和我的「print」語句打印的日誌,它可行嗎?我可以在pythonw中獲得「print」語句的輸出嗎?

+0

它是如何失敗? – 2010-09-09 08:45:27

回答

3

您可以全局重定向通過分配sys.stdout來標準輸出:

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

那麼你的程序的標準輸出,其中包括打印報表的休息,會去mylog.txt。

1

您可以將打印輸出重定向到任何流。例如

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

雖然大部分的時間會比較適合使用Python內置的日誌工具從logging模塊。

-1

我發現一個太長的普通打印語句會使程序崩潰。你需要重定向輸出。 爲了驗證這一想法創建一個簡單的程序

import time 
    time.sleep(5) 

保存它作爲test.pyw。當你運行這個程序時,它會顯示在任務管理器上。 現在通過添加打印語句來修改它。這個文本文件有超過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) 

該程序將崩潰。

+1

大聲笑,你有一個製表符在你的文件名? :D您的程序很可能會崩潰,否則。完成你所做的正確方法是使用'''.join'。 – Gandaro 2012-02-17 14:17:03

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,或者做任何你想做的事情。

相關問題