如果输入很少,如何保持 While True 循环 运行 raw_input()?

How to keep a While True loop running with raw_input() if inputs are seldom?

我目前正在开展一个项目,我需要通过串行持续发送数据,但偶尔需要根据新输入更改该数据。我的问题是我的当前循环仅在 raw_input() 提供新输入时准确运行。在收到另一个 raw_input() 之前,不会再运行。

我当前的(非常精简的)循环如下所示:

while True:
    foo = raw_input()
    print(foo)

无论更改发生的频率如何,我都希望不断打印(或传递给另一个函数)最新值。

感谢任何帮助。

在打印数据的同时,您将如何输入数据?

但是,如果您确保数据源不会干扰数据输出,则可以使用多线程。

import thread

def give_output():
    while True:
        pass  # output stuff here

def get_input():
    while True:
        pass  # get input here

thread.start_new_thread(give_output, ())
thread.start_new_thread(get_input, ())

您的数据源可能是另一个程序。您可以使用文件或套接字连接它们。

select (or in Python 3.4+, selectors) 模块可以让您在不使用线程的情况下解决这个问题,同时仍然执行定期更新。

基本上,您只需编写普通循环,但使用 select 确定是否有新输入可用,如果有,则抓住它:

import select

while True:
    # Polls for availability of data on stdin without blocking
    if select.select((sys.stdin,), (), (), 0)[0]:
        foo = raw_input()
    print(foo)

正如所写,这 print 远远超过您可能想要的;您可以在每个 print 之后 time.sleep,或者将 select.select 的超时参数更改为 0 以外的值;例如,如果你将它设置为 1,那么当有新数据可用时你将立即更新,否则,你将等待一秒钟然后放弃并再次打印旧数据。