Zanurkuj w Pythonie/Standardowy strumień wejścia, wyjścia i błędów: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Nie podano opisu zmian |
|||
Linia 36:
This message will be logged instead of displayed
(W Windowsie, możesz wykorzystać polecenie <tt>type</tt>, zamiast <tt>cat</tt>, aby wyświetlić zawartość pliku.)
Jeśli jeszcze tego nie zrobiłeś, możesz pobrać [http://diveintopython.org/download/diveintopython-examples-5.4.zip ten i inne przykłady] użyte w tej książce.
#stdout.py
Linia 51:
fsock.close() #(7)
# To zostanie wypisane w interaktywnym oknie IDE (lub w terminalu, jeśli skrypt został uruchomiony w linii poleceń).
# Zawsze, zanim przekierujemy standardowe wyjście, przypisujemy gdzieś <tt>stdout</tt>, dzięki temu, będziemy potem mogli do niego normalnie wrócić.
# Otwieramy plik do zapisu. Jeśli plik nie istnieje, zostanie utworzone. Jeśli istnieje, zostanie nadpisany.
# Całe późniejsze wyjście zostanie przekierowane do pliku, który właśnie otworzyliśmy.
# Zostanie to wypisane tylko do pliku <tt>out.log</tt>; nie będzie widoczne w oknie IDE lub w terminalu.
# Przywracamy <tt>stdout</tt> do początkowej postaci, zanim zaczęliśmy się w nim babrać.
#
'''
[you@localhost kgp]$ python stderr.py
Linia 70:
Exception: this error will be logged
Jeśli jeszcze tego nie zrobiłeś, możesz pobrać [http://diveintopython.org/download/diveintopython-examples-5.4.zip ten i inne przykłady] użyte w tej książce.
#stderr.py
Linia 79:
raise Exception, 'this error will be logged' #(3) (4)
# Otwieramy plik <tt>error.log</tt>, gdzie chcemy przechowywać informacje debugujące.
# Przekierowujemy standardowy strumień błędów, dzięki przypisaniu obiektu pliku nowo otwartego pliku do <tt>sys.stderr</tt>.
# Rzucamy wyjątek. Zauważmy, że na ekranie wyjściowym nic nie zostanie wypisane. Wszystkie informacje ''traceback'' zostały zapisane w <tt>error.log</tt>.
# Zauważmy także, że nie zamkneliśmy wyraźnie pliku log, a nawet nie przypisaliśmy do <tt>sys.stderr</tt> jest pierwotnej wartości. To jest wspaniałe, że kiedy program się rozwali (z powodu wyjątku), Python wyczyści i zamknie wszystkie pliki za nas. Nie ma żadnej różnicy, czy <tt>stderr</tt> zostanie przywrócony, czy też nie, ponieważ program się rozwala, a Python kończy działanie. Przywrócenie wartości do orginalnej, jest bardziej ważne dla <tt>stdout</tt>, jeśli zamierzasz później wykonywać jakieś inne operacje w tym samym skrypcie.
Ponieważ powszechnie wypisuje się informacje o błędach na standardowy strumień błędów, Python posiada skrótową składnie, która można wykorzystać do bezpośredniego przekierowywania wyjścia.
'''
>>> print 'entering function'
Linia 94:
entering function
# Ta skrótowa składnia wyrażenia <tt>print</tt> może być wykoryzstywane do pisania do dowolnego, otwartego pliku, lub do ''obiektu pliko-podobnego''. W tym przypadku, możemy przekierować pojedynczą instrukcję <tt>print</tt> do <tt>stderr</tt> bez wpływu na następne instrukcje <tt>print</tt>.
Standard input, on the other hand, is a read-only file object, and it represents the data flowing into the program from some previous program. This will likely not make much sense to classic Mac OS users, or even Windows users unless you were ever fluent on the MS-DOS command line. The way it works is that you can construct a chain of commands in a single line, so that one program's output becomes the input for the next program in the chain. The first program simply outputs to standard output (without doing any special redirecting itself, just doing normal print statements or whatever), and the next program reads from standard input, and the operating system takes care of connecting one program's output to the next program's input.
|