Come si legge da stdin?

Sto cercando di fare alcune delle sfide code golf, ma tutte richiedono che l'input sia preso da stdin. Come posso ottenerlo in Python?

Potreste usare il modulo fileinput:

import fileinput

for line in fileinput.input():
    pass

fileinput eseguirà un ciclo di tutte le linee in input specificate come nomi di file dati negli argomenti della linea di comando, o lo standard input se non sono forniti argomenti.

Nota: line conterrà un newline finale; per rimuoverlo usa line.rstrip()

Commentari (1)

Ci sono alcuni modi per farlo.

  • sys.stdin è un oggetto simile a un file su cui puoi chiamare le funzioni read o readlines se vuoi leggere tutto o se vuoi leggere tutto e dividerlo per newline automaticamente. (È necessario importare sys perché questo funzioni).

  • Se volete promuovere l'utente per l'input, potete usare raw_input in Python 2.X, e solo input in Python 3.

  • Se in realtà volete solo leggere le opzioni della linea di comando, potete accedervi tramite la lista sys.argv.

Probabilmente troverete anche questo articolo di Wikibook sull'I/O in Python come utile riferimento.

Commentari (0)

Ecco da Learning Python:

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

Su Unix, si potrebbe testare facendo qualcosa come

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

Su Windows o DOS, si potrebbe fare:

C:\> type countlines.py | python countlines.py 
Counted 3 lines.
Commentari (3)