python中的自定义提示

python中的自定义提示,python,command-line,Python,Command Line,我有一个脚本,它在第一次运行时创建一个记录特定事件的新线程。创建线程后,我要求用户输入以下代码: user_input = raw_input('>> ') 因此,当脚本运行时,用户收到“>>”提示,但当来自已创建线程的记录器开始记录日志时,它开始如下所示: >> Error: Some random error Error: Another error 正如你所看到的,它搞砸了,失去了提示。我想做的是让日志消息出现,但仍将光标保持在提示符上,以备输入。比如: &

我有一个脚本,它在第一次运行时创建一个记录特定事件的新线程。创建线程后,我要求用户输入以下代码:

user_input = raw_input('>> ')
因此,当脚本运行时,用户收到“>>”提示,但当来自已创建线程的记录器开始记录日志时,它开始如下所示:

>> Error: Some random error  
Error: Another error
正如你所看到的,它搞砸了,失去了提示。我想做的是让日志消息出现,但仍将光标保持在提示符上,以备输入。比如:

>>  
Error: Some random error  
Error: Another error
>>

问题是您的
raw_input()
运行在完全不同的线程上,并且不知道记录器刚刚输出了一些日志消息。因此,
raw\u input()
无法知道它应该重新绘制提示

我没有任何简单的解决办法。我所能想到的就是让logger线程不打印消息,而是将它们附加到
raw\u input()
线程可以看到的共享列表中,并让该线程在用户输入后打印消息

事实上,我还有一个想法:你可以在窗口顶部绘制
>
提示符,让日志消息在窗口的下方显示。如果它们在空间上是分开的,那么它们是否在时间上是交错的就无关紧要了。

显而易见的(可能也是唯一正确的)解决方案是登录到单独的文件,而不是标准输出。
如果您仍然希望实时观察日志输出,可以在日志文件上使用命令,例如
tail-f

那么您希望两个线程写入同一个控制台而不发生输出冲突?是的,这正是我想要的。如果使用tail-f不会弄乱提示,那么就足够了。另外,python是否有一个简单的tail-f等价物?或者我必须手动阅读最后一行吗?这是一个很好的简单解决方案。您可以在另一个命令行窗口中运行
tail-f
。您甚至可以让Python启动一个相当于
tail-f
的GUI作为后台进程。StackOverflow最佳GUI讨论
tail-f
等效: