这是一个非常复杂的问题,但是我希望可能有一个图书馆可以快速完成我想要做的事情.
对于我来说,开始解释这一点的最佳方法是使用所需输出的示例:
+------------------------------------------------+
| TESTAPP v0.1 (C) Test Company Running |
| ---------------------------------------------- |
| info: This is a logged message. |
| input: user typed "hello" |
| info: This is a logged message. |
| debug: option 1 code 2 value 3 |
| info: The debug line was just printed. |
| --Status: [Opts 1] [Codes 5] [Values 11] -- |
| > about to press enter... |
+------------------------------------------------+
部分:
+------------------------------------------------+
| TITLE BAR -- TITLE BAR -- TITLE BAR -- TITLE |
| ... |
| ... |
| ...scrolling log area... |
| ... |
| ... |
| ... |
| STATUS BAR -- STATUS BAR -- STATUS BAR -- |
| > INPUT LINE -- INPUT LINE -- INPUT LINE < |
+------------------------------------------------+
这里是关键点:
>一个Python程序,启动后将全屏显示.
>最上方的一行将是标题栏,其中可能包含一些可更新的区域.
>标题栏正下方的行可能是分隔符(不一定是)
>最底行将是输入行.
>输入线正上方的线将是状态线,该状态线将经常更新.
>状态线上方的线可以用作分隔符,但不是必需的.
>屏幕*的其余行将是滚动历史视图.应用程序将向该区域写入行,并且该区域填满后,最早的行将在屏幕外滚动.
>回滚缓冲区会很好,但不是绝对必要的.
>对于状态栏和标题栏,颜色输出是理想的,但是简单的反转也是可以接受的.
>输入行应支持读取行样式的历史记录等.
>此外,它需要向左推并滚动而不是换行,因此,如果用户键入太多文本,整个UI都不会被推出屏幕.
例:
| info: The debug line was just printed. |
| --Status: [Opts 1] [Codes 5] [Values 11] -- |
| > ...men to come to the aid of their country._ |
+------------------------------------------------+
基本上,我正在编写要在控制台上可控制的服务器.简单地将服务器置于线程上并启动raw_input循环的简单方法意味着,从服务器到控制台的输出很容易中断文本的输入.
举一个更简洁的例子,考虑irssi或epicII.
从理论上讲,我可以自己使用curses库和大量工作来编写所有这些代码,但是在我看来,可能需要某种库,或者至少有些捷径来实现这一目标.首先,我对curses库不太熟悉.除非那里有一个非常好的简明的快速入门指南,否则我觉得我最终将花费更多的时间来理解编写实际服务器代码时遇到的诅咒.