web-dev-qa-db-fra.com

Que lit sys.stdin?

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?

5
Vimzy

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).

6
cdarke

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))
3
Burhan Khalid
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.

2
Anthony Kong

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.

1

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.

0
Mr. Suryaa Jha