Python 测试条件不工作

Python 测试条件不工作,python,select,timeout,sys,Python,Select,Timeout,Sys,我正在使用python与select和system library,代码如下: from __future__ import (absolute_import, division, print_function, unicode_literals) from select import select import sys def main(): timeout = 5 print('Please type something

我正在使用python与select和system library,代码如下:

from __future__ import (absolute_import, division,
                            print_function, unicode_literals)
from select import select
import sys
def main():
    timeout = 5
    print('Please type something: ', end = '')
    sys.stdout.flush()
    rlist, wlist, xlist = select([sys.stdin],[],[], timeout)
    k=sys.stdin.readline()
    if k=="f":
        data = sys.stdin.readline()
        print('you entered', data)
    else:
        print('\nSorry, {} seconds timeout expired!'.format(timeout))
        print(k) #see the sys.stdin result
if __name__ == '__main__':
    main()
此程序等待用户输入字符 如果用户在5秒钟后输入一个字符,那么程序也会停止,如果用户给出了与“f”字符不同的字符,但是问题是,这个条件不起作用,我会进行一次测试,以查看
sys.stdin
值的结果,他会给我一个“f”字符,但是当我在if语句中输入结果时,程序不会工作 此结果的屏幕截图:


有人能告诉我这个结果的原因吗?

我对
select
库不太了解。但这里有一个错误立刻引起了我的注意

使用
k=sys.stdin.readline()
读取输入。这意味着
k
将包含完整的行,包括
\n
(换行符)符号。因此,如果按
f+Enter
k
的值将是
“f\n”
,而不是
“f”
。这就是为什么比较总是错误的原因

如果k.strip()=“f”:最好将这些值与
进行比较


编辑 刚刚快速查看了
select
库。如果要确定是否发生超时,则需要使用select函数的返回值。而不是直接从输入读取。否则,无论是否发生超时,您都将等待

我不确定您想要完成什么,但是类似于以下代码的东西可以工作

from __future__ import print_function
from select import select
import sys

timeout = 5
print('Please type something: ', end = '')
sys.stdout.flush()
inputready, _, _ = select([sys.stdin],[],[], timeout)
if inputready:
    k = sys.stdin.readline()
    if k.strip()=="f":
        print("You printed 'f'")
    else:
        print("Not 'f'")
else:
    print('\nSorry, {} seconds timeout expired!'.format(timeout))

是的,它工作正常谢谢我忘记了\n但是您的答案中不清楚为什么要添加int@Sekmani52“int”???你是说变量inputready吗?这是select的返回值之一。它告诉我们,是否有人写了输入。干得好。Sekmani52还没有足够的代表投票。。。但我知道@user38034很抱歉,我的笔记本电脑关机了,我没有编辑我的答案hhh我会更正我的评论我说为什么你要添加
如果输入准备:
为什么不
如果k.strip():
直接我正在我的机器中测试代码,没有
如果输入准备:
我会工作,谢谢,是的helpful@Sekmani52好啊:-)
如果输入已就绪:
实际上是最重要的事情。如果
inputready==False
,则用户尚未写入任何内容。如果您只写
k=sys.stdin.readline()
,它将等待用户实际写了什么。这当然不是你想要实现的。如果用户在前5秒内没有写入任何内容,则您不想读取输入,只想打印一条错误消息。至少这是我认为你想做的。