测试条件不起作用

时间:2017-07-22 13:32:50

标签: python select timeout sys

我在这里使用python和select和系统库代码:

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

此程序等待用户直到放入char 如果用户在5秒后放入一个字符,我就会在程序中输入一个条件,所以如果用户提供了不同的“f' char,但条件不起作用的问题我进行测试以查看sys.stdin值的结果,他给了我' f char但是当我把结果放在if语句中时程序不工作 这个结果截图: enter image description here

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

1 个答案:

答案 0 :(得分:1)

我对select图书馆了解不多。但这是一个错误立即引起了我的注意。

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

最好将这些值与if 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))