1 | ||
Editor: s0
Time: 2005/09/22 18:04:11 GMT+0 |
||
Note: |
changed: - V některých případech se může hodit zachytávat standardní výstup a místo do konzoly (na obrazovku) jej zapisovat do souboru. Jednoduché přesměrování výstupu do souboru Příklad:: import sys soubor = open("access.log","a") sys.stdout = soubor print "Tento text se nevypíše na obrazovku ale do souboru access.log" soubor.close() sys.stdout=sys.__stdout__ Přesměrování do streamu Některé aplikace mohou využít přesměrovaný výstup jiným způsobem než prostým zápisem do logovacího souboru. Výstup může být uložen v databázi, dále zpracováván apod. Pro takové úlohy se používá StringIO resp. cStringIO objekt. Příklad:: """ Ukazka presmerovani standardniho vystupu skriptu do IO streamu. cStringIO zde pouzivam, protoze je rychlejsi nez klasicky StringIO, kteryzto lze ale dedit apod. Doporucuji ke studiu dokumentaci - kap. 4. """ import cStringIO import sys cout = cStringIO.StringIO() sys.stdout = cout # analogicky napr. sys.stderr = cout # nebo jiny stream sys.stderr = cout try: # simulace vystupu for i in range(10): print 'Naprosto zasadni vystup: %s' % i # simulace chyby print 'A ted neco naprosto jineho - skript s umele vyvolanou vyjimkou!' try: raise ValueError except: # Abych dostal do vystupu i "chybovou hlasku" musim v tomto pripade # pouzit modul traceback import traceback traceback.print_exc() finally: # vratim puvodni stream, takze odtud uz vse jde rouvnou na vystup sys.stdout = sys.__stdout__ sys.stdout = sys.__stderr__ # Se streamem ted muzu delat psi kusy. # Treba zapsat standardne do souboru (coz si za domaci # ukol proti chybam osetri kazdy sam)... f = open('output.log', 'w') f.write(cout.getvalue()) f.close() # ... anebo jej vypsat na vystup pozdeji... print cout.getvalue() # ... anebo spocitat jeho velikost (delku) print 'Delka retezce: %s ' % len(cout.getvalue()) # a treba ruzne parsovat atd. atd. cout.close()
V některých případech se může hodit zachytávat standardní výstup a místo do konzoly (na obrazovku) jej zapisovat do souboru.
Příklad:
import sys soubor = open("access.log","a") sys.stdout = soubor print "Tento text se nevypíše na obrazovku ale do souboru access.log" soubor.close() sys.stdout=sys.__stdout__
Některé aplikace mohou využít přesměrovaný výstup jiným způsobem než prostým zápisem do logovacího souboru. Výstup může být uložen v databázi, dále zpracováván apod. Pro takové úlohy se používá StringIO? resp. cStringIO objekt.
Příklad:
""" Ukazka presmerovani standardniho vystupu skriptu do IO streamu. cStringIO zde pouzivam, protoze je rychlejsi nez klasicky StringIO, kteryzto lze ale dedit apod. Doporucuji ke studiu dokumentaci - kap. 4. """ import cStringIO import sys cout = cStringIO.StringIO() sys.stdout = cout # analogicky napr. sys.stderr = cout # nebo jiny stream sys.stderr = cout try: # simulace vystupu for i in range(10): print 'Naprosto zasadni vystup: %s' % i # simulace chyby print 'A ted neco naprosto jineho - skript s umele vyvolanou vyjimkou!' try: raise ValueError except: # Abych dostal do vystupu i "chybovou hlasku" musim v tomto pripade # pouzit modul traceback import traceback traceback.print_exc() finally: # vratim puvodni stream, takze odtud uz vse jde rouvnou na vystup sys.stdout = sys.__stdout__ sys.stdout = sys.__stderr__ # Se streamem ted muzu delat psi kusy. # Treba zapsat standardne do souboru (coz si za domaci # ukol proti chybam osetri kazdy sam)... f = open('output.log', 'w') f.write(cout.getvalue()) f.close() # ... anebo jej vypsat na vystup pozdeji... print cout.getvalue() # ... anebo spocitat jeho velikost (delku) print 'Delka retezce: %s ' % len(cout.getvalue()) # a treba ruzne parsovat atd. atd. cout.close()