如何在脚本中打印值时不断等待用户输入?

时间:2017-10-07 19:24:07

标签: python multithreading

我有一个带有一些值的python脚本,每秒都打印在终端上。但是我的脚本应该总是在等待用户输入并依赖于输入更改脚本中的变量。

现在我有以下代码,每秒只打印一次值。我希望这个脚本在后台持续等待用户输入,并依赖于输入改变楼层的值。

var allWords = File.ReadAllText("File.txt")
    .Split(
        new[] { ' ', '\n', '\r', ',', ';', ':', '.', '!', '?', '-' },
        StringSplitOptions.RemoveEmptyEntries
    );

1 个答案:

答案 0 :(得分:1)

在这种情况下,您不需要多线程。您希望等待输入最多一秒,然后更新floor变量(如果用户输入了任何内容)。这种类似的最佳工具是selectselectors模块中提供的I / O多路复用。

例如:

import sys
import select
floor = 0.0
timeout = 1.0
while True:
    rlist, wlist, xlist = select.select([sys.stdin], [], [], timeout)
    if len(rlist):
        floor = float(sys.stdin.readline().rstrip('\n'))
        print('New value received.')
    print(floor)

但我应该指出,这不是一个愉快的用户体验。值不断被打印,这意味着用户的输入和输出在控制台中混合在一起。这不会影响程序的运行方式,因为stdinstdout是不同的流。由于输出同时打印,因此用户很难正确输入值。

您确定需要不断打印吗?等待用户输入一个值,然后在收到它时打印它可能更有用吗?在这种情况下,您甚至不需要select模块,只需等待sys.stdin.readline()的输入。