Zanurkuj w Pythonie/Standardowy strumień wejścia, wyjścia i błędów: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
koniec |
|||
Linia 1:
{{Podświetl|py}}
== Standardowy strumień wejścia, wyjścia i błędów==
Linia 94 ⟶ 92:
entering function
# Ta skrótowa składnia wyrażenia <tt>print</tt> może być
Z innej strony, standardowe wejścia jest obiektem pliku tylko do odczytu i reprezentuje dane przechodzące z niektórych wcześniejszych programów. Prawdopodobnie nie jest to zrozumiałe dla klasycznych użytkowników Mac OS-a lub nawet dla użytkowników Windows, którzy nie mieli za wiele do czynienia z linią poleceń MS-DOS-a. Działa to w ten sposób, że konstruujemy ciąg poleceń w jednej linii, w taki sposób, że to co jeden program wypisuje na wyjście, następny w tym ciągu traktuje jako wejście. Pierwszy program prosto wypisuje wszystko na standardowe wyjście (bez korzystania ze specjalnych przekierowań, wykorzystuje normalną instrukcję <tt>print</tt> itp.), a następny program czyta ze standardowego wejścia, a system operacyjny udostępnia połączenie pomiędzy wyjściem pierwszego programu, a wyjściem kolejnego.
'''
<nowiki>
[you@localhost kgp]$ python kgp.py -g binary.xml #(1)
Linia 119 ⟶ 117:
</nowiki>
# Jak zobaczyliśmy w podrozdziale 9.1, “Nurkujemy”, polecenie to wyświetli ciąg ośmiu przypadkowych bitów, <tt>0</tt> lub <tt>1</tt>.
# Dzięki temu po prostu wypiszemy całą zawartość pliku <tt>binary.xml</tt>. (Użytkownicy Windowsa powinni wykorzystać polecenie <tt>type</tt> zamiast <tt>cat</tt>.)
# Polecenie to wypisuje zawartość pliku <tt>binary.xml</tt>, ale znak "|" (ang. ''pipe''), oznacza, że standardowe wyjście nie zostanie wypisana na ekran. Zamiast tego, zawartość standardowego wyjścia zostanie wykorzystane jako standardowe wejście następnego programu, który w tym przypadku jest skryptem Pythona.
# Zamiast określać modułu (np. <tt>binary.xml</tt>), dajemy "-", który każe naszemy skryptowi wczytać gramatykę ze standardowego wejścia, zamiast z określonego pliku na dysku. (Więcej o tym, w jaki sposób to się dzieje w następnym przykładzie.) Zatem efekt będzie taki sam, jak w pierwszym poleceniu, gdzie bezpośrednio określamy plik gramatyki, ale tutaj zwróćmy uwagę na rozszerzone możliwości. Zamiast wywoływać <tt>cat binary.xml</tt>, moglibyśmy uruchomić skrypt, który by dynamicznie generował gramatykę, a następnie mógłby ją doprowadzić do naszego skryptu. Dane mogłyby przyjść skądkolwiek: z bazy danych, innego skryptu generującego gramatykę lub jeszcze inaczej. Zaletą tego jest to, że nie musimy zmieniać w żaden sposób <tt>kgp.py</tt>, aby dołączyć jakąś funkcjonalność. Jedynie, co potrzebujemy, to możliwość wczytania gramatyki ze standardowego wejścia, a całą logikę dodatkowej funkcjonalności możemy rozdzielić wewnątrz innego programu.
Więc w jaki sposób skrypt "wie", żeby czytać ze standardowego wejścia, gdy plik gramatyki to "-"? To nie jest żadna magia; to tylko właśnie prosty kod.
'''
Linia 140 ⟶ 138:
[... ciach ...]
#
<noinclude>
|