如果输入很少,如何保持 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,那么当有新数据可用时你将立即更新,否则,你将等待一秒钟然后放弃并再次打印旧数据。
我目前正在开展一个项目,我需要通过串行持续发送数据,但偶尔需要根据新输入更改该数据。我的问题是我的当前循环仅在 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,那么当有新数据可用时你将立即更新,否则,你将等待一秒钟然后放弃并再次打印旧数据。