J'écris à mon processus Python à partir de la ligne de commande sur UNIX. Je veux envoyer EOF (ou en quelque sorte sur le tampon STDIN, donc Python peut lire mon entrée.) P>
Si je frappe Ctrl-C, je reçois un clavierError. p>
Si je frappe Ctrl-D, le programme arrête simplement. P>
Comment puis-je chasser le tampon STDIN? P>
4 Réponses :
Si vous utilisez 'pour l dans Sys.stdin', il est tamponné.
Vous pouvez utiliser: p>
while 1: l = sys.stdin.readline()
C'est tamponné de toute façon. Il n'y a pas de différence entre les deux.
En fait, ce qui précède a travaillé pour moi. Je pense que j'ai lu sur la liste de diffusion que "pour l in Sys.stdin" a un tampon interne supplémentaire, alors que Sys.stdin.readline () ne le fait pas.
@Jasonorendorff: En fait, il y a une différence sur Python 2 en raison de Bug tampon de lecture . Vous pouvez utiliser pour la ligne dans iter (sys.stdin.readline, ''): code> pour le contourner. Essayez d'exécuter
chat | Python2 -C "
readline () code> La variante conduit aux lignes disponibles immédiatement.
Control-d ne doit pas faire votre programme "juste arrêter" - il doit fermer l'entrée standard et si votre programme traite correctement, il peut parfaitement continuer s'il doit être!
Par exemple, étant donné le Suivant Nous pouvions voir quelque chose comme p> si le contrôle -D est touché juste après l'entrée sur la troisième ligne - le programme réalise que l'entrée standard est effectuée et effectue le post-traitement requis, tous soignés et appropriés. P> Si votre programme sort prématurément sur le contrôle -D, il doit être mal codé - Qu'en est-il de la modification de votre question pour ajouter le programme "MISSURAGE" le plus petit que vous puissiez concevoir, afin que nous puissions vous montrer exactement comment vous allez mal? P> P> st.py code>: p>
Je pense que je sais ce qui se passe. Vous frappez Par exemple, disons que j'ai un script Python et je l'exécute: p> puis entrez les éléments suivants: < / p> Le programme imprimera: p> $ python a.py ( gras strong> montrer la sortie du programme. L'affaire romaine est destinée à montrer ce que j'ai saisi, Sans les deux Si ce n'est pas ce qui se passe, vous devez nous en dire plus sur ce que vous faites. p> p> ctrl-d code> sans frapper
entrer code>. Si vous souhaitez envoyer une ligne au programme, appuyez simplement sur Entrée. Si vous appuyez sur
ctrl-d code> sans frapper
Entrée code>, vous pouvez appuyer sur
Ctrl-D code> à nouveau et votre programme doit voir la ligne alors. Dans ce cas (deux
Ctrl-D code> S successions), votre programme ne verra pas une nouvelle ligne à la fin de la ligne.
a.py code>: p>
$ code> est l'invite de shell. Voici une session complète avec l'entrée ci-dessus: P>
ligne 1
Ligne 2
Ctrl-D code> s) p>
try: # You might be inside the while-loop foo = raw_input('Spam: ') # Or whatever... except EOFError: print 'And now for something completely different.' sys.exit()
La plupart des terminaux fonctionnent, dès que vous appuyez sur Entrée, votre entrée est envoyée à Python.
Si vous souhaitez modifier la manière dont cela fonctionne, Python doit modifier les paramètres de terminal, qui est la magie noire ... Voir le module
TERMIOS code> peut-être? docs.python.org/library/termios.html