¿Cómo se lee desde stdin?

Estoy intentando hacer algunos de los retos de code golf, pero todos ellos requieren que la entrada se tome de stdin. ¿Cómo puedo conseguirlo en Python?

Puede utilizar el módulo fileinput:

import fileinput

for line in fileinput.input():
    pass

fileinput recorrerá todas las líneas de la entrada especificada como nombres de archivos dados en los argumentos de la línea de comandos, o la entrada estándar si no se proporcionan argumentos.

Nota: línea contendrá una nueva línea al final; para eliminarla utilice line.rstrip().

Comentarios (1)

Hay varias formas de hacerlo.

  • sys.stdin es un objeto similar a un fichero sobre el que puedes llamar a las funciones read o readlines si quieres leerlo todo o quieres leerlo todo y dividirlo por una nueva línea automáticamente. (Necesitas importar sys para que esto funcione).

  • Si quieres preguntar al usuario por la entrada, puedes usar raw_input en Python 2.X, y sólo input en Python 3.

  • Si en realidad sólo quieres leer las opciones de la línea de comandos, puedes acceder a ellas a través de la lista sys.argv.

Probablemente encontrarás este artículo de Wikibook sobre E/S en Python como una referencia útil también.

Comentarios (0)

Esto es de Learning Python:

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

En Unix, puedes probarlo haciendo algo como

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

En Windows o DOS, harías:

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