Como você lê a partir de stdin?

I'estou tentando fazer alguns dos desafios code golf, mas todos eles requerem que a entrada seja retirada do stdin. Como faço para conseguir isso em Python?

Você poderia utilizar o módulo fileinput:

import fileinput

for line in fileinput.input():
    pass

fileinput irá percorrer todas as linhas na entrada especificada como nomes de arquivos dados em argumentos de linha de comando, ou a entrada padrão se nenhum argumento for fornecido.

Nota: line conterá uma nova linha; para removê-la utilize line.rstrip()

Comentários (1)

Há algumas maneiras de o fazer.

  • sys.stdin` é um objeto semelhante a um arquivo no qual você pode chamar as funções read ou readlines se você quiser ler tudo ou se você quiser ler tudo e dividi-lo por newline automaticamente. (Você precisa importar o sys para que isto funcione).

  • Se você quiser pedir ao usuário para entrada, você pode utilizar raw_input em Python 2.X, e apenas input em Python 3.

  • Se você realmente quiser apenas ler as opções de linha de comando, você pode acessá-las através da lista sys.argv.

Você provavelmente encontrará este artigo do Wikibook sobre I/O em Python para ser uma referência útil também.

Comentários (0)

Aqui está de Aprendendo Python:

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

No Unix, podias testá-lo, fazendo algo como:

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

No Windows ou no DOS, você faria:

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