web-dev-qa-db-fra.com

Comment terminer l'entrée sys.stdin.readlines ()?

C'est peut-être une question stupide, mais comme je ne trouve pas de réponse, je dois la poser.

En interactif python je veux traiter un message que je reçois avec:

>>> message = sys.stdin.readlines()

Tout fonctionne bien, mais ... comment l'empêcher d'obtenir une entrée et la faire enregistrer dans une variable de message? L'arrêt avec ctrl + c arrête tout le processus, il n'y a donc aucune entrée à enregistrer n'importe où. Je suppose qu'il y a une réponse facile que je ne trouve pas ...

25
Gandi

Pour les systèmes basés sur Unix:

Bonjour, vous pouvez enregistrer: Ctrld

Ctrld ferme l'entrée standard (stdin) en envoyant EOF .

Exemple :

>>> import sys
>>> message = sys.stdin.readlines()
Hello
World
My
Name
Is
James
Bond
# <ctrl-d> EOF sent
>>> print message
['Hello\n', 'World\n', 'My\n', 'Name\n', 'Is\n', 'James\n', 'Bond\n']

Pour Windows:

Pour envoyer EOF sous Windows, vous pouvez remplacer Ctrld par Ctrlz

48
Sandro Munda

C'est une vieille question mais elle a besoin d'une mise à jour sur Windows et différentes dispositions de clavier.

Si ni CTRL + Z ni CTRL + D ** fonctionne pour vous sous Windows et que vous vous demandez ce qui se passe, procédez comme suit:

  • vérifiez si vous utilisez disposition du clavier anglais par défaut
  • si vous avez une disposition de clavier différente de celle par défaut, essayez de changer le réglage du clavier en anglais dans la barre de langue, puis essayez d'appuyer sur ctrl + z après les modifications
  • si vous êtes toujours confus, regardez l'écran, ce qui apparaît en ligne de commande lorsque vous appuyez sur ctrl + z. Quel symbole voyez-vous? Quand j'appuyais sur ctrl + z je voyais ceci: ^ Y, et quand par erreur j'ai appuyé sur ctrl + y j'ai vu ceci ^ Z, j'ai appuyé sur enter et l'entrée a été prise, EOF = envoyé.

C'est quelque peu étrange et contre-intuitif. J'ai changé la disposition des touches il y a quelque temps pour inclure des caractères polonais, mais toutes les touches communes restent inchangées, z correspond toujours à z lorsque j'utilise le clavier normalement, normalement ctrl + z ne fait rien sur mon clavier, donc je ne devrais pas être changé . Mais apparemment, en cmd, cela fonctionne différemment, afin d'avoir un lien par défaut entre ctrl et z, je dois passer à la disposition par défaut, ou utiliser le contrôle y pour envoyer EOF.

5
Pawel Miech

Utilisation CTRL-D.

message = sys.stdin.readlines()
abc
def
<CTRL-D>

# message == ['abc\n', 'def\n']
4
eumiro

Sur Windows, faites simplement CTRL + Z et appuyez sur Entrée

3
Devendra Bhat