web-dev-qa-db-fra.com

Comment lire l'entrée utilisateur jusqu'à EOF?

Mon code actuel lit les entrées utilisateur jusqu'au saut de ligne. Mais j'essaie de changer cela en un format, où l'utilisateur peut écrire une entrée jusqu'à strg + d pour terminer son entrée.

Je le fais actuellement comme ceci:

input = raw_input ("Input: ")

Mais comment puis-je changer cela en une version compatible EOF?

32
Saphire

Utilisez file.read :

input_str = sys.stdin.read()

Selon la documentation:

file.read([size])

Lire au plus octets de taille à partir du fichier (moins si la lecture atteint EOF avant d'obtenir des octets de taille). Si l'argument taille est négatif ou omis, lire toutes les données jusqu'à EOF est atteint.

>>> import sys
>>> isinstance(sys.stdin, file)
True

BTW, n'utilisez pas input comme nom de variable. Il masque la fonction intégrée input .

34
falsetru

Cela a fonctionné pour moi dans Python 3:

from sys import stdin

for line in stdin:
  print(line)
27
arekolek

Vous pouvez également effectuer les opérations suivantes:

acc = []
out = ''
while True:
    try:
        acc.append(raw_input('> ')) # Or whatever Prompt you prefer to use.
    except EOFError:
        out = '\n'.join(acc)
        break
19
Joel Cornett

Avec sys.stdin.readline() vous pourriez écrire comme ceci:

import sys

while True:
    input_ = sys.stdin.readline()
    if input_ == '':
        break
    print type(input_)
    sys.stdout.write(input_)

N'oubliez pas, quelle que soit votre entrée, c'est une chaîne.

Pour raw_input ou input version, écrivez comme ceci:

while True:
    try:
        input_ = input("Enter:\t")
        #or
        _input = raw_input("Enter:\t")
    except EOFError:
        break
    print type(input_)
    print type(_input)
    print input_
    print _input
2
Pet B