Comment lire depuis stdin ?

J'essaie de relever certains des défis du [code golf][1], mais ils nécessitent tous que l'entrée soit prise dans stdin. Comment puis-je obtenir cela en Python ?

[1] : http://en.wikipedia.org/wiki/Code_golf

Vous pouvez utiliser le module [fileinput][1] :

import fileinput

for line in fileinput.input():
    pass

[fileinput][1] parcourra en boucle toutes les lignes de l'entrée spécifiée par les noms de fichiers donnés en arguments de ligne de commande, ou l'entrée standard si aucun argument n'est fourni.

Note : line contiendra un saut de ligne ; pour le supprimer, utilisez line.rstrip().

[1] : http://docs.python.org/library/fileinput.html

Commentaires (1)

Il y a plusieurs façons de le faire.

  • [sys.stdin][1] est un objet de type fichier sur lequel vous pouvez appeler les fonctions read ou readlines si vous voulez tout lire ou si vous voulez tout lire et le couper automatiquement par une nouvelle ligne. (Vous devez importer sys pour que cela fonctionne).

  • Si vous voulez solliciter l'utilisateur pour une entrée, vous pouvez utiliser raw_input dans Python 2.X, et juste input dans Python 3.

  • Si vous souhaitez simplement lire les options de la ligne de commande, vous pouvez y accéder via la liste [sys.argv][2].

Vous trouverez probablement [cet article du Wikibook sur les E/S en Python][3] une référence utile.

[1] : http://docs.python.org/library/sys.html#sys.stdin [2] : http://docs.python.org/library/sys.html#sys.argv [3] : http://en.wikibooks.org/wiki/Python_Programming/Input_and_output

Commentaires (0)

Voici un extrait de [Learning Python][1] :

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

Sous Unix, vous pouvez le tester en faisant quelque chose comme :

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

Sous Windows ou DOS, vous feriez.. :

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

[1] : http://web.archive.org/web/20140928083217/http://oreilly.com/catalog/lpython/chapter/ch09.html#16308

Commentaires (3)