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
Vous devez vous connecter pour publier un commentaire.
C'est aussi simple que cela.
Cela ressemble à de l'entrée de mise en mémoire tampon, soit dans le fichier de l'objet de la mise en œuvre ou au niveau de l'OS. C'est normal. Si vous souhaitez que les différents tampon de comportement, il existe des moyens pour obtenir, mais ce n'est pas le sujet de cette question.
Cela permettra de s'accrocher éternellement si l'entrée ne marche pas fin à un retour à la ligne.
href="https://ideone.com/Gf9FZL" >vous ne Pouvez pas reproduire. tant Que le flux d'entrée se termine effectivement (au lieu d'être simplement laissé ouvert), la boucle prend fin. Si vous utilisez ce à partir du terminal, vous avez à taper Ctrl-D ou quelque chose de signal de fin de saisie.
merci d'ajouter un commentaire c'est correct uniquement pour Python 3
OriginalL'auteur user2357112
Utiliser try/except. Entrée
Lorsque EOF est lu, EOFError est soulevée.
OriginalL'auteur KIM Taegyoon