Je comprends comment ouvrir des fichiers, puis j'utilise les fonctions pré-intégrées de Python avec eux. Mais comment fonctionne sys.stdin?
for something in sys.stdin:
some stuff here
lines = sys.stdin.readlines()
Quelle est la différence entre les deux utilisations ci-dessus sur sys.stdin? Où lit-il l'information? Est-ce via le clavier ou devons-nous toujours fournir un fichier?
Donc, vous avez utilisé les "fonctions pré-intégrées" de Python, probablement comme ceci:
file_object = open('filename')
for something in file_object:
some stuff here
Ceci lit le fichier en appelant un iterator sur le fichier objet qui renvoie la ligne suivante du fichier.
Vous pourriez plutôt utiliser:
file_object = open('filename')
lines = file_object.readlines()
qui lit les lignes de la position actuelle du fichier dans une liste.
Désormais, sys.stdin
est simplement un autre objet de fichier, que Python a ouvert avant le démarrage de votre programme. Ce que vous faites avec cet objet fichier dépend de vous, mais ce n'est pas vraiment différent de tout autre objet fichier, mais vous n'avez pas besoin de open
.
for something in sys.stdin:
some stuff here
itérera par l’entrée standard jusqu’à ce que la fin du fichier soit atteinte. Et ainsi va ceci:
lines = sys.stdin.readlines()
Votre première question concerne en réalité différentes manières d'utiliser un objet fichier.
Deuxièmement, où lit-il? Il lit le descripteur de fichier 0 (zéro). Sous Windows, c'est le descripteur de fichier 0 (zéro). Le descripteur de fichier/descripteur 0 est connecté à la console ou au terminal par défaut; il lit donc à partir du clavier. Cependant, il peut être redirigé , souvent par un shell (comme bash ou cmd.exe) en utilisant la syntaxe suivante:
myprog.py < input_file.txt
Cela modifie le descripteur de fichier zéro pour lire un fichier à la place du clavier. Sous UNIX ou Linux, l’appel sous-jacent dup2()
est utilisé. Lisez votre documentation Shell pour plus d'informations sur la redirection (ou peut-être man dup2
si vous êtes courageux).
Il lit à partir de l'entrée standard - et il devrait être fourni par le clavier sous la forme de données en flux.
Il n'est pas nécessaire de fournir un fichier. Toutefois, vous pouvez utiliser redirection pour utiliser un fichier comme entrée standard.
En Python, la méthode readlines()
lit le flux entier, puis la scinde au caractère newline et crée une liste de chaque ligne.
lines = sys.stdin.readlines()
Ce qui précède crée une liste appelée lignes, où chaque élément sera une ligne (déterminée par le caractère de fin de ligne).
Vous pouvez en savoir plus à ce sujet dans la section input et output du tutoriel Python.
Si vous souhaitez inviter l'utilisateur à entrer, utilisez la méthode input()
(dans Python 2, utilisez raw_input()
):
user_input = input('Please enter something: ')
print('You entered: {}'.format(user_input))
for something in sys.stdin:
some stuff here
Le code ci-dessus ne fonctionne pas comme prévu car sys.stdin
est un descripteur de fichier. Il s'agit d'un descripteur de fichier correspondant à la variable stdin
. Il n'atteindra pas la ligne some stuff here
lines = sys.stdin.readlines()
Lorsque le script ci-dessus est exécuté dans un shell interactif, il bloque l'exécution jusqu'à ce qu'un utilisateur appuie sur Ctrl-D, ce qui indique la fin de l'entrée.
Pour comprendre le fonctionnement de sys.stdin, procédez comme suit:
pour créer un script Python simple, appelons-le "readStdin.py":
import sys
lines = sys.stdin.readlines()
print (lines)
Maintenant, ouvrez la console de n'importe quel type dans:
echo "line1 line2 line3" | python readStdin.py
Le script affiche:
['"line1 line2 line3" \n']
Ainsi, le script a lu l'entrée dans la liste (nommée 'lignes'), y compris le caractère de nouvelle ligne produit par 'echo'. C'est.
Selon moi, la méthode sys.stdin.read () accepte une ligne comme entrée de l'utilisateur jusqu'à ce qu'un caractère spécial comme Entrer la clé et suivi de Ctrl + D, puis stocke l'entrée comme chaîne.
Control + D fonctionne comme signal d'arrêt.
Exemple:
import sys
input = sys.stdin.read()
print(input)
tokens = input.split()
a = int(tokens[0])
b = int(tokens[1])
print(a + b)
Après avoir exécuté le programme, entrez deux nombres délimités par une espace et, une fois l'opération terminée, appuyez sur Ctrl + D une ou deux fois pour afficher la somme des deux entrées.