繁体   English   中英

input()vs sys.stdin.read()

[英]input() vs sys.stdin.read()

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

#type "s" for example

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

为什么? 如何使input()正常工作? 我试图编码/解码s1 ,但它不起作用。

谢谢。

如果你在Windows上,你会注意到当你输入's'和输入时input()的结果是"s\\r" 从结果中删除所有尾随空格,你会没事的。

你没有说你正在使用哪个版本的Python,所以我猜你是在使用在Microsoft Windows上运行的Python 3.2。

这是一个已知的错误,请参阅http://bugs.python.org/issue11272 “input()在Windows上有尾随回车”

解决方法包括使用不同版本的Python,使用非Windows操作系统,或者从input()返回的任何字符串()中删除尾随回车。 您还应该意识到迭代stdin具有相同的问题。

首先,输入类似于eval(raw_input()) ,这意味着您传递给它的所有内容都将被视为python expresion。 我建议你改用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)将只读取stdin中的1个字符,这意味着如果你传递“s”只是第一个“将被读取。有sys.stdin.readline()读取整行(包括最后\\ n)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM