在rustyline中托管REPL子进程时的输出阻塞问题求助
在rustyline中托管REPL子进程时的输出阻塞问题求助
嘿各位,我最近在开发一个基于rustyline的程序,目标是把另一个REPL程序作为子进程托管,还想实现命令自动补全这类功能。但我碰到了一个严重影响用户体验的问题:rustyline::Editor里的readline()函数会阻塞主线程,这时候如果子进程想要输出内容,得等用户按下回车解除阻塞后才能显示出来,这完全破坏了使用体验。
给大家贴段代码方便理解问题:
loop { // rx是负责运行子进程的线程持有的接收器 while let Ok(output_line) = rx.try_recv() { println!("{}", output_line); } let readline = rl.readline("> "); // 这里会阻塞直到用户按下回车 match readline { // 处理readline结果的代码... } }
我试过开一个线程持续打印子进程的输出,但也没用——根本没法协调什么时候调用readline,以及什么时候显示>提示符,总是会出现输出和提示符乱序或者阻塞的问题。
有没有大佬能给我支个招,怎么解决这个子进程输出被readline阻塞的问题呀?
内容来源于stack exchange
相关产品推荐
相关产品推荐

