input() 与 sys.stdin.read() 的比较

6 投票
3 回答
29753 浏览
提问于 2025-04-16 17:56
import sys
s1 = input()
s2 = sys.stdin.read(1)

#type "s" for example

s1 == "s" #False
s2 == "s" #True

为什么会这样?我该怎么让 input() 正常工作呢?我试着对 s1 进行编码和解码,但就是不行。

谢谢你。

3 个回答

0

首先,输入就像是 eval(raw_input()),这意味着你传给它的任何东西都会被当作Python表达式来计算。我建议你使用raw_input()来代替。

我测试了你的代码,结果对我来说是一样的:

import sys
s1 = input()
s2 = sys.stdin.read(1)

if s1==s2 and s1=="s":
    print "They're both equal s"

这是输出结果:

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

使用sys.stdin.read(1)只会从标准输入中读取一个字符,这意味着如果你传入"s",那么只会读取第一个字符"。还有sys.stdin.readline(),它会读取整行内容(包括最后的换行符\n)。

6

你没有说明你使用的是哪个版本的Python,所以我猜你可能是在微软Windows上使用Python 3.2。

这是一个已知的bug,详情可以查看这个链接:http://bugs.python.org/issue11272,标题是“在Windows上,input()有多余的回车符”。

解决这个问题的方法包括:换一个版本的Python,使用不是Windows的操作系统,或者在使用input()返回的字符串时去掉多余的回车符。你还需要知道,处理标准输入(stdin)时也会遇到同样的问题。

7

如果你在使用Windows系统,你会发现当你输入一个's'然后按回车键时,input()的结果是"s\r"。只要把结果末尾的空白字符去掉就没问题了。

撰写回答