如何通过对特定键使用键盘中断来更改 python 脚本中的对象?
How to change objects in a python script by using a keyboardinterrupt for specific keys?
在查看用于退出多线程脚本的 KeyboardInterrupt 之后,我想知道是否可以使用键盘上的向上和向下键来 increase/decrease 正在使用的线程数?这有望以与 KeyboardInterrupt 相同的方式发生,以便它可以随时发生。这样的事情是否可能,或者是否有另一种方法更适合这种情况?
def do_something(input_file, threads):
concurrent = threads
l = read_csv(input_file)
for i in range(concurrent):
t = Thread(target=create_accounts)
t.daemon = True
t.start()
try:
for account in l:
q.put(account)
q.join()
except KeyboardInterrupt:
sys.exit(1)
if __name__ == '__main__':
threads = 1
q = Queue(threads * 2)
do_something('test.csv', threads)
一个KeyboardInterrupt
是个特别的东西。在 Unix 上,Python 基本上让终端将 ^C 转换为 SIGINT
信号,并为引发异常的 SIGINT
安装信号处理程序。在 Windows 上,它有点复杂,但基本思想相同。普通按键不会中断您的代码。
但是你可以只用一个线程来听键盘。您的主线程似乎没有做任何有用的事情;如果是,则将该工作踢到后台线程。然后你的主线程就可以等待键盘输入了。
但是……你如何等待键盘输入?这是棘手的部分。通常,在大多数平台上,输入是行缓冲的。而且箭头键已经有了特殊的含义,就像循环浏览过去条目的历史。
您可以通过在 Unix 上使用 Console I/O on Windows, termios
来在低级别执行此操作),并学习有关字符代码的整个混乱业务,以便您可以真正识别箭头键。但是您可能会发现使用更高级别的包装器要容易得多。有各种各样的选择,从 getch
和 consoleio
到 PyGame 或 Qt;搜索 PyPI。
在查看用于退出多线程脚本的 KeyboardInterrupt 之后,我想知道是否可以使用键盘上的向上和向下键来 increase/decrease 正在使用的线程数?这有望以与 KeyboardInterrupt 相同的方式发生,以便它可以随时发生。这样的事情是否可能,或者是否有另一种方法更适合这种情况?
def do_something(input_file, threads):
concurrent = threads
l = read_csv(input_file)
for i in range(concurrent):
t = Thread(target=create_accounts)
t.daemon = True
t.start()
try:
for account in l:
q.put(account)
q.join()
except KeyboardInterrupt:
sys.exit(1)
if __name__ == '__main__':
threads = 1
q = Queue(threads * 2)
do_something('test.csv', threads)
一个KeyboardInterrupt
是个特别的东西。在 Unix 上,Python 基本上让终端将 ^C 转换为 SIGINT
信号,并为引发异常的 SIGINT
安装信号处理程序。在 Windows 上,它有点复杂,但基本思想相同。普通按键不会中断您的代码。
但是你可以只用一个线程来听键盘。您的主线程似乎没有做任何有用的事情;如果是,则将该工作踢到后台线程。然后你的主线程就可以等待键盘输入了。
但是……你如何等待键盘输入?这是棘手的部分。通常,在大多数平台上,输入是行缓冲的。而且箭头键已经有了特殊的含义,就像循环浏览过去条目的历史。
您可以通过在 Unix 上使用 Console I/O on Windows, termios
来在低级别执行此操作),并学习有关字符代码的整个混乱业务,以便您可以真正识别箭头键。但是您可能会发现使用更高级别的包装器要容易得多。有各种各样的选择,从 getch
和 consoleio
到 PyGame 或 Qt;搜索 PyPI。