【问题标题】:custom prompt in pythonpython中的自定义提示
【发布时间】:2009-12-30 21:31:42
【问题描述】:

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

user_input = raw_input('>> ')

因此,当它运行的脚本用户收到“>>”提示时,但是当来自创建线程的记录器开始记录时,它开始看起来像这样:

>> Error: Some random error  
Error: Another error

如您所见,它一团糟并丢失了提示。我想做的是显示日志消息,但仍将光标保持在提示符上以准备输入。喜欢:

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

【问题讨论】:

  • 所以你想要两个线程写入同一个控制台而不发生输出冲突?
  • 是的,这正是我想要的。

标签: python command-line


【解决方案1】:

问题是您的raw_input() 运行在一个完全不同的线程上,并且不知道记录器刚刚喷出了一些日志消息。所以raw_input() 没有办法知道它应该重新绘制提示。

我没有任何简单的解决方案给你。我能想到的只是记录器线程不打印消息,而是将它们附加到raw_input() 线程可以看到的某个共享列表中,并让该线程在用户输入输入后打印消息。

实际上,我确实有另一个想法:您可以在窗口顶部绘制>> 提示符,并让记录器消息显示在窗口的下方。如果它们在空间上是分开的,那么它们是否在时间上交错并不重要。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果使用 tail -f 不会弄乱提示,那么它就足够了。另外,python是否有一个简单的tail -f等价物?还是我必须手动阅读最后一行?
    • 这是一个不错的简单解决方案。您在另一个命令行窗口中运行tail -f。你甚至可以让 Python 启动一个相当于 tail -f 的 GUI 作为后台进程。 StackOverflow 讨论最佳 GUI tail -f 等效:stackoverflow.com/questions/133821/the-best-tail-gui
    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多