2017-10-07 3 views
1

Je lis dans les lignes en utilisant le code suivant:Arrêt Lorsque EOF On Line Python

for line in sys.stdin: 
    print('Output: ', end='') 
    print(line.rstrip('\n')) 

Comme je tape je vois sortie tels que:

test 
Output: test 
another test 
Output: another test 
eof at end of line^DOutput: eof at end of line 
I can still type here 
Output: I can still type here 
... 

Dans ce cas ^D signifie en tapant CTRL- D ou le caractère EOF.

Mon programme doit se terminer lorsqu'un EOF se produit à la fin d'une ligne, et pas seulement lorsqu'il s'agit du seul caractère d'une ligne. Comment puis-je obtenir ce comportement?

comportement Exemple:

test 
Output: test 
another test 
Output: another test 
eof at end of line^DOutput: eof at end of line 
[program terminates] 

Répondre

0

Vous ne mentionnez pas votre système d'exploitation, mais je parierais chance c'est LINUX ou d'une autre variante UNIX.

L'astuce ici est que^D n'est pas vraiment le marqueur EOF. Au lieu de cela, le conducteur lisant l'entrée identifie le^D comme signalant la fin du fichier et ferme ainsi le fichier reliant le terminal à votre programme, produisant la condition EOF. Le kicker, cependant, est que le pilote interprète SEULEMENT^D quand c'est le premier caractère de la ligne, au cas où quelqu'un voudrait réellement pouvoir taper^D. Donc, cela va être plus difficile à faire, mais ce n'est pas qu'il y ait un problème dans votre programme - vous voyez juste un comportement inattendu mais normal.

+0

Le pilote de terminal ne ferme pas le flux et interprète toujours '^ D'. Mais il fait juste 'read (2)' return, ce qui implique seulement EOF quand il retourne 0. –

+0

Y at-il un moyen d'obtenir le comportement que je veux? Je sais en C je peux utiliser quelque chose comme 'while (getline (& line, & n, stdin)! = -1)' et cela va produire mon comportement attendu. – carloabelli