reading read from espaƱol python python-3.x input python-3.2

python - from - input() vs sys.stdin.read()



sys.stdin python 3 (3)

En primer lugar, la entrada es como eval (raw_input ()), lo que significa que todo lo que le pase se evaluará como una expresión de python. Le sugiero que use raw_input () en su lugar.

Probé tu código y son iguales para mí:

import sys s1 = input() s2 = sys.stdin.read(1) if s1==s2 and s1=="s": print "They''re both equal s"

Este es el resultado:

flaper87@BigMac:/tmp$ python test.py "s" s They''re both equal s

Al usar sys.stdin.read (1) se leerá solo 1 carácter del stdin, lo que significa que si pasa "s" solo se leerá el primero. Hay sys.stdin.readline () que lee toda la línea (incluido el final / n).

import sys s1 = input() s2 = sys.stdin.read(1) #type "s" for example s1 == "s" #False s2 == "s" #True

¿Por qué? ¿Cómo puedo hacer que input() funcione correctamente? Traté de codificar / decodificar s1 , pero no funciona.

Gracias.


No dijiste qué versión de Python estás usando, así que voy a adivinar que estabas usando Python 3.2 ejecutándose en Microsoft Windows.

Este es un error conocido, vea http://bugs.python.org/issue11272 "input () tiene un retorno de carro posterior en las ventanas"

Las soluciones incluirían el uso de una versión diferente de Python, utilizando un sistema operativo que no sea Windows, o la eliminación del carro posterior devuelve cualquier cadena () devuelta desde la input() . También debe tener en cuenta que iterar sobre stdin tiene el mismo problema.


Si estás en Windows, verás que el resultado de la input() cuando escribes una ''s'' y Enter es "s/r" . Elimina todos los espacios en blanco del resultado y estarás bien.