Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在未收到用户输入时执行某些操作_Python_Loops_Input - Fatal编程技术网

Python 在未收到用户输入时执行某些操作

Python 在未收到用户输入时执行某些操作,python,loops,input,Python,Loops,Input,在Python中,在用户未给出输入的情况下,我可以用什么方式在循环中执行某些操作。 我有一个python客户端,我要求用户输入,但当用户还没有输入时,我希望每五秒钟更新一次 我不能用 while (raw_input==""): update() 因为如果输入为“”,则表示用户已经输入了某些内容(按enter键) 有办法吗 更新: 我还是找不到适合我的东西。我尝试了下面的方法,也尝试了类似于此线程的方法:。我还尝试将update()方法传递给应该在后台工作的线程。但是任何带有ra

在Python中,在用户未给出输入的情况下,我可以用什么方式在循环中执行某些操作。 我有一个python客户端,我要求用户输入,但当用户还没有输入时,我希望每五秒钟更新一次

我不能用

 while (raw_input==""):
      update()
因为如果输入为“”,则表示用户已经输入了某些内容(按enter键)

有办法吗

更新:

我还是找不到适合我的东西。我尝试了下面的方法,也尝试了类似于此线程的方法:。我还尝试将update()方法传递给应该在后台工作的线程。但是任何带有raw_input()的东西都会使它停留在等待输入上:

 import threading
 import time

def update():
   while True:
      time.sleep(5)
      print "update"+'\n'

mythread = threading.Thread(target=update, args=())
mythread.daemon = True
mythread.start()

while True:
   usrin=raw_input()
   print "you typed: "+usrin
每次用户输入内容时,都会进行更新,然后返回usrin。如果这是我想要的,我可以轻松地将update()放入最后一个while循环

如果我只是用update方法启动这个线程,而在程序中不做任何其他事情(废弃最后一个while循环),那么在shell中,当它每五秒钟更新一次时,我仍然可以使用shell(即类型3+5,它给我8)。我希望这样的事情发生在程序中,当用户处于非活动更新状态时,如果他键入了react并返回更新


注意:另外,我目前正在使用python 2.7.8,切换版本是否有帮助?

也许这可以帮助您开始:

from threading import Thread
from time import sleep

result = None

def update_every_second():
    while result is None:
        sleep(1)
        print "update"

t = Thread(target=update_every_second)
t.start()
result = raw_input('? ')

print "The user typed", result

也许使用
线程
是一个不错的选择。一般来说,线程之间共享的资源(如数据)应该使用某种机制来防止同时访问。@martineau在这种情况下GIL是不够的吗?首先,防止一次运行多个线程的GIL(全局解释器锁)是C Python实现细节,并非所有Python都有。另外,我的理解是它是在I/0上发布的。即使是从未执行任何I/O的CPU绑定线程也会偶尔释放并重新获取GIL,这给了其他线程运行的机会。@martineau我不确定您的观点是什么。上面示例中唯一的共享资源是名称
结果的绑定:它由主线程反弹,由另一个线程读取。一个读取器、一个编写器和一个编写器在任何Python实现上执行原子操作(一次重新绑定)。读取器执行在G中找到的LGB查找。考虑到LGB的L部分在编译时被解析,该查找可能(有效地)在任何实现上也是原子的。如何提高上述代码示例的线程安全性?您需要吗?简单地说,
result
处于不确定状态,而
raw\u input()
正在从输入中读取一行,等待换行,同时将读取的字符累积到字符串中——因此您不希望另一个线程同时检查其值。顺便说一句,这通常被称为范围规则。