En python, comment vérifier la fin de la norme les flux d'entrée (sys.stdin) et faire quelque chose de spécial sur ce

Je veux faire quelque chose comme:

for line in sys.stdin:
    do_something()
    if is **END OF StdIn**:
        do_something_special()

Après quelques essais, pour l'instant, je suis en train de faire ceci:

while True:
    try:
        line = sys.stdin.next()
        print line,
    except StopIteration:
        print 'EOF!'
        break

Ou avec ceci:

while True:
    line = sys.stdin.readline()
    if not line:
        print 'EOF!'
        break
    print line,

Je pense que les deux moyens ci-dessus sont très similaires. Je veux savoir est-il un plus élégant (pythonic) façon de le faire?


Début de l'échec de la tente:

J'ai d'abord essayé d'attraper le StopIteration de l'intérieur ou de l'extérieur d'un for boucle, mais je me rends compte que depuis le StopIteration exception est construire en for boucle elle-même, tant à l'extrait de code suivant ne fonctionne pas.

try:
    for line in sys.stdin:
        print line,
except StopIteration:
    print 'EOF'

ou

for line in sys.stdin:
    try:
        print line,
    except StopIteration:
        print 'EOF'
Avez-vous trouvé la réponse à votre question? Je suis confronté au même problème en 2.7. Il doit y avoir une solution simple.

OriginalL'auteur YaOzI | 2014-06-06