如何使线程与 pynput 一起用于转义序列?
How do I make threading work with pynput for an escape sequence?
我已经尝试了一段时间让我的监听器工作以退出我的程序,但我让它工作的唯一方法是一个糟糕的解决方案。
这是我想要让它工作的方式:
def main():
thread2 = threading.Thread(target=printing, args=())
thread2.start()
with Listener(on_release=on_release) as listener:
listener.join()
def on_release(key):
if key == Key.esc:
return False
def printing():
while True:
print('foo bar')
time.sleep(2)
if not Listener.running:
break
main()
这就是我让它工作的方式:
def main():
with Listener(on_release=on_release) as listener:
printing(listener)
def on_release(key):
if key == Key.esc:
return False
def printing():
while True:
print('foo bar')
time.sleep(2)
if not Listener.running:
break
main()
基本的想法是不必在我的代码中的任何地方都使用侦听器,如果我为较大的项目这样做,因为让 esc 退出程序是好的。
我知道我必须使用线程,但不知道如何使用它。有人可以指出我的问题并提供解决方案吗?
我看过 Handling the keyboard,但不太明白它在说什么。我想用这个更干净的方法。
我不知道pynput
,但是threading
一点点。线程可以有子线程,所以你可以在 Listener
开始新的线程。像这样……我想说,但困在这里。即使父线程死了,子线程还活着!这个线程被称为僵尸线程。那我们该怎么办呢?答案是守护线程。如果活着的线程只是守护线程,守护线程就会死亡。将子线程设置为守护线程,这样父线程就一起死了。解释了这么久,但继续:
def main():
with Listener(on_release=on_release) as listener:
thread2 = threading.Thread(target=printing, args=(), daemon=True)
thread2.start()
listener.join()
def on_release(key):
if key == Key.esc:
return False
def printing():
while True:
print('foo bar')
time.sleep(2)
if __main__ == '__main__':
main()
它会起作用的!
我已经尝试了一段时间让我的监听器工作以退出我的程序,但我让它工作的唯一方法是一个糟糕的解决方案。
这是我想要让它工作的方式:
def main():
thread2 = threading.Thread(target=printing, args=())
thread2.start()
with Listener(on_release=on_release) as listener:
listener.join()
def on_release(key):
if key == Key.esc:
return False
def printing():
while True:
print('foo bar')
time.sleep(2)
if not Listener.running:
break
main()
这就是我让它工作的方式:
def main():
with Listener(on_release=on_release) as listener:
printing(listener)
def on_release(key):
if key == Key.esc:
return False
def printing():
while True:
print('foo bar')
time.sleep(2)
if not Listener.running:
break
main()
基本的想法是不必在我的代码中的任何地方都使用侦听器,如果我为较大的项目这样做,因为让 esc 退出程序是好的。
我知道我必须使用线程,但不知道如何使用它。有人可以指出我的问题并提供解决方案吗?
我看过 Handling the keyboard,但不太明白它在说什么。我想用这个更干净的方法。
我不知道pynput
,但是threading
一点点。线程可以有子线程,所以你可以在 Listener
开始新的线程。像这样……我想说,但困在这里。即使父线程死了,子线程还活着!这个线程被称为僵尸线程。那我们该怎么办呢?答案是守护线程。如果活着的线程只是守护线程,守护线程就会死亡。将子线程设置为守护线程,这样父线程就一起死了。解释了这么久,但继续:
def main():
with Listener(on_release=on_release) as listener:
thread2 = threading.Thread(target=printing, args=(), daemon=True)
thread2.start()
listener.join()
def on_release(key):
if key == Key.esc:
return False
def printing():
while True:
print('foo bar')
time.sleep(2)
if __main__ == '__main__':
main()
它会起作用的!