Vr.
Hoe kan ik de output van een Python-script naar een bestand sturen?
Antw.
Op de commandline kun je de standard output (stdout) pipen naar een bestand:
python mijnscript.py > output.txt # dit vervangt telkens de inhoud van het bestand met de output. python mijnscript.py >> output.txt # dit voegt de nieuwe output onderaan toe aan de bestaande output.
De output van het commando ‘print’ kun je in het script zelf omleiden naar een apart bestand:
import sys sys.stdout=open("test.txt","w") print ("hello") sys.stdout.close()
“Don’t use print, use logging”
Het bovenstaande is geen mooie oplossing. Daarom kun je in plaats van print beter de module logging gebruiken.
Met logging kun je net als met print naar stdout schrijven, maar je kunt de output ook naar een bestand schrijven. Je kunt zelfs verschillende message levels (critical, error, warning, info, debug) gebruiken. Print bijvoorbeeld alleen belangrijke meldingen naar de console, but log kleinere acties in de code naar een bestand.
Een voorbeeld: import logging, haal de logger op en stel processing level in:
import logging logger = logging.getLogger() logger.setLevel(logging.DEBUG) # process everything, even if everything isn't printed
Als je naar stdout wilt printen:
ch = logging.StreamHandler() ch.setLevel(logging.INFO) # of een ander level logger.addHandler(ch)
Als je ook naar een bestand wilt schrijven (als je alleen naar een bestand wilt schrijven, laat dan het laatste stuk weg):
fh = logging.FileHandler('myLog.log') fh.setLevel(logging.DEBUG) # of een ander level logger.addHandler(fh)
Vervolgens kun je in plaats van ‘print’ een van de logger methoden gebruiken :
# print(foo) logger.debug(foo) # print('finishing processing') logger.info('finishing processing') # print('Something may be wrong') logger.warning('Something may be wrong') # print('Something is going really bad') logger.error('Something is going really bad')
Meer info over logging vind je in de Python docs: https://docs.python.org/3.5/howto/logging.html