and*_*ndy 12 python readline read-eval-print-loop
我有一个基于Python的应用程序,可以在一个简单的read-eval-print循环中接受一些命令.我正在使用raw_input('> ')输入.在基于Unix的系统上,我还要import readline让事情变得更好.这一切都很好.
问题是有异步事件进入,我想尽快打印输出.不幸的是,这让事情看起来很难看.输出后,">"字符串不再显示,如果用户输入内容的一半,则会将文本切成两半.它可能应该在打印后重绘用户正在进行的文本.
这似乎必须是一个已解决的问题.这样做的正确方法是什么?
另请注意,我的一些用户是基于Windows的.
TIA
编辑:接受的答案在Unixy平台下工作(当readline模块可用时),但如果有人知道如何在Windows下工作,那将非常感谢!
也许这样的事情会起到作用:
#!/usr/bin/env python2.6
from __future__ import print_function
import readline
import threading
PROMPT = '> '
def interrupt():
print() # Don't want to end up on the same line the user is typing on.
print('Interrupting cow -- moo!')
print(PROMPT, readline.get_line_buffer(), sep='', end='')
def cli():
while True:
cli = str(raw_input(PROMPT))
if __name__ == '__main__':
threading.Thread(target=cli).start()
threading.Timer(2, interrupt).start()
Run Code Online (Sandbox Code Playgroud)
我不认为stdin是线程安全的,所以你最终可能会丢失字符到中断线程(用户将不得不在结束时重新键入interrupt).我夸大interrupt了time.sleep电话的时间.该readline.get_line_buffer电话将不会显示迷失的人物,所以这一切原来好了.
请注意,stdout本身不是线程安全的,所以如果你有多个执行中断线程,那么这仍然看起来很糟糕.
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |