2010-09-09 3 views
3

pythonw.exe n'a pas de console, donc je ne peux pas voir la sortie d'impression. Mais mon programme est OKAY dans python.exe, échoué dans pythonw.exe. Je veux juste voir les journaux de l'interpréteur python et le journal imprimé par mon "impression" déclaration, est-ce faisable?Puis-je obtenir la sortie de l'instruction "print" dans pythonw?

+0

Comment ça marche? –

Répondre

3

Vous pouvez globalement stdout en attribuant Rediriger à sys.stdout:

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

Puis le reste de stdout de votre programme, y compris les déclarations d'impression, ira à mylog.txt.

1

Vous pouvez rediriger la sortie d'impression vers n'importe quel flux. Par exemple

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

Bien que la plupart du temps, il serait plus approprié d'utiliser les installations d'exploitation forestière intégrée de python à partir du module logging.

-1

J'ai trouvé qu'une instruction d'impression normale trop longue provoquera le blocage du programme. Vous devez rediriger la sortie. Pour tester cette idée de créer un programme simple

import time 
    time.sleep(5) 

Enregistrer comme test.pyw. Lorsque vous exécutez ce programme, il apparaîtra sur le gestionnaire de tâches. Maintenant, modifiez-le en ajoutant une instruction d'impression. Ce fichier texte contient plus de 100 lignes.

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) 

Le programme va planter.

+1

LOL, vous avez une tabulation dans votre nom de fichier? : D Votre programme est très susceptible de planter autrement. La bonne façon d'accomplir ce que vous avez fait est d'utiliser ''' .join'. – Gandaro

0

Vous pouvez rediriger la sortie vers n'importe quelle classe qui implémente une méthode .write. Par exemple, je redirige à la fois sys.stdout et sys.stderr vers une classe qui écrit les résultats dans une zone de texte enrichie, avec la sortie normale en noir et les erreurs en rouge.

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() 

Dans ce cas, logControl est juste une référence à une zone de texte riche que je peux supposer existe. Vous pouvez écrire à la fois le contrôle et un fichier, rediriger vers dbgview ou faire à peu près tout ce que vous voulez avec.

Questions connexes