Ako čítate zo stdin?

Snažím sa splniť niektoré z výziev code golf, ale všetky vyžadujú, aby bol vstup prevzatý z stdin. Ako to získam v Pythone?

Môžete použiť modul fileinput:

import fileinput

for line in fileinput.input():
    pass

fileinput prechádza všetky riadky na vstupe zadané ako názvy súborov uvedené v argumentoch príkazového riadka alebo štandardný vstup, ak nie sú zadané žiadne argumenty.

Poznámka: line bude obsahovať koncové nové riadky; na ich odstránenie použite line.rstrip()

Komentáre (1)

Existuje niekoľko spôsobov, ako to urobiť.

  • sys.stdin je objekt podobný súboru, na ktorom môžete volať funkcie read alebo readlines, ak chcete čítať všetko, alebo chcete čítať všetko a automaticky to rozdeliť novým riadkom. (Aby to fungovalo, musíte importovať sys.)

  • Ak chcete vyžiadať od používateľa vstup, môžete v Pythone 2.X použiť raw_input a v Pythone 3 len input.

  • Ak chcete vlastne len čítať voľby príkazového riadka, môžete k nim pristupovať prostredníctvom zoznamu sys.argv.

Za užitočnú referenciu pravdepodobne považujete aj tento článok Wikibooku o vstupoch a výstupoch v jazyku Python.

Komentáre (0)

Tu'je z Learning Python:

import sys
data = sys.stdin.readlines()
print "Counted", len(data), "lines."

Na Unixe by ste to mohli otestovať tak, že urobíte niečo ako:

% cat countlines.py | python countlines.py 
Counted 3 lines.

V systéme Windows alebo DOS by ste urobili:

C:\> type countlines.py | python countlines.py 
Counted 3 lines.
Komentáre (3)