1
這是一個相當複雜的問題,但我希望有一個圖書館可以快速完成我期待的任務。實現帶有底部編輯行,狀態欄和滾動歷史記錄的「控制檯外殼」的最佳方式?
,我開始解釋這一點,最好的方法是用所需的輸出的例子:
+------------------------------------------------+
| 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程序將在啓動後全屏顯示。
- 最上面一行是標題欄,可能包含一些可更新區域。
- 標題欄正下方的行可以是分隔符(不一定是必需的)
- 最下面一行是輸入行。
- 輸入行正上方的行將是一個狀態行,它會經常更新。
- 狀態行上方的一行可以用作分隔符,但不一定是必需的。
- 屏幕中央的其餘行將是滾動歷史視圖。應用程序會將線條寫入此區域,並且在區域已滿後,最早的線條將在屏幕外滾動。
- 回滾緩衝區會很好,但不是絕對必要的。
- 顏色輸出對於狀態和標題欄是可取的,但簡單的反轉是可以接受的。
- 輸入行應支持readline樣式的歷史記錄等。
- 此外,它需要推動並滾動到左側而不是纏繞,所以如果用戶鍵入的文本過多,則整個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庫。除非那裏有一個非常好的簡明快速入門指南,否則我覺得最終會花費更多時間來理解編寫實際服務器代碼的詛咒。 :-)
也可以使用pygame並讓測試變得有趣;-) http://programarcadegames.com/ http://www.pygame.org/ – lxx
也可以預訂pycurses的章節http://heather.cs.ucdavis.edu/ 〜matloff/Python/PLN/PyCurses.tex – lxx
使用ncurses面板庫定義3個區域將使您的生活更輕鬆http://docs.python.org/2/library/curses.panel.html – Craig