2012-12-03 133 views
2

我有一個項目,廣泛使用Python(2. * flavors),我想知道是否有終端菜單庫或類似的東西?我希望通過使用箭頭鍵highlightable選項,某種顏色等簡化一些選項來爲我的腳本呼吸一些味道和生命。我依稀記得有一種方法可以製作bash shell終端菜單,但我不在所有相信我將如何將用戶輸入從bash傳遞給python腳本,也許有一個bash終端菜單用sysarggs推腳本調用?如果可能的話,我想在python方面提供一些東西。有什麼建議麼?Python終端菜單?終端着色?終端進度顯示?

同樣也是一個隨機問題,因爲我們談論終端美學的主題,所以最適合處理櫃檯的是什麼?我的腳本查找圖像文件,然後當它找到一個清除終端與子進程調用清除,然後打印總圖像再次找到IE 10圖像,找到一個,清除,打印「找到11個圖像」,有時我的腳本工程REAL速度快,我覺得這種損害表現。思考?

非常感謝大家,我愛堆棧溢出;)

編輯 - 感謝所有的快速反應!我有很多選項可供選擇。我向所有人致謝,因爲你的回覆都很有幫助。當我回家時,我會檢查所有的圖書館,並試圖根據最佳答案挑選其中一個答案,希望我可以選擇所有答案,因爲所有答案都是相關的!非常感謝人們。我會在我下班回家後報到,並有機會獲得一些編碼;)

編輯2 - 對計數器/進度顯示的說明,尋找一種方法,以防止此損害性能時我的腳本在很短的時間內發現了數以千計的圖像,這是真正的蟒蛇...

for each item in list: 
    if item ends with .jpg 
     cnt=cnt+1 
     do stuff with image file 
     subprocess.call('clear') 
     print str(cnt)+" total images processed." 

再次感謝!

+0

我不明白你在櫃檯部分提出的問題。 –

+0

@MthetheAdams嘿,對不起,模糊!基本上,每當我的腳本從它看到的任何源中找到一個圖像文件時,它就會快速地cnt = cnt + 1,從而增加計數器。所以基本上計數器/進度顯示有點像 - 參考編輯2! – 0xhughes

+0

啊。當「用圖像文件做東西」絕對是其中最慢的部分時,很難談論性能命中。如果你願意的話,我想你可以嘗試並行處理。 –

回答

2

有一個庫叫Urwid,提供菜單和更多。我從來沒有把它用於嚴肅的目的,但它在我的初步經驗中工作得很好。它只適用於Un * x系統。 (該項目頁面說它在Cygwin下工作,但我從來沒有嘗試過。)

+0

+1,但是這個更好/更糟糕/與curses相同嗎? –

+1

我從來沒有嘗試過'curses',但Urwid提供了一個帶有信號/回調的運行循環,兩者都需要用'curses' AFAIK手動設置。對於像我這樣更熟悉GUI框架的人來說,這非常重要。 – uranusjr

+0

Urwid有我正在尋找的菜單(droids);)@uranusjr – 0xhughes

4

如果你想要很多控制並且你在* nix上,你可以使用stdlib curses module

如果你只是想要一點顏色(/不想修改你的腳本每噸適合curses),你可以使用ANSI escape codes。例如:

print '\033[1;32mgreen\033[1;m' 

將打印「綠色」這個詞,彩色...綠色。

這是我想出了使用回車(基於this forum答案)加載條:

from time import sleep 
import sys 

num = 100 

print 'Loading: [%s] %d%%' % (' '*(num/2), 0), 

try: 
    colorCode = 43 
    for x in xrange(num+1): 
     if x == num: colorCode = 42 
     print '\rLoading: [\033[1;%dm%s\033[1;m%s] %d%%' % (colorCode, "|"*(x/2), " "*(num/2-x/2), x), 
     sys.stdout.flush() 
     sleep(0.02) # do actual stuff here instead 
except KeyboardInterrupt: 
     print '\rLoading: [\033[1;41m%s\033[1;m%s] %d%% ' % ("|"*(x/2), " "*(num/2-x/2), x) 

輸出示例:

Loading: [|||||||||||||||||||||||||||||||||||||||||   ] 82% 

(雖然它並不顯示在所以它的顏色是黃色的用於加載,紅色用於放棄,綠色用於完成。)

5

退房克林特(* ç * ommand * 大號 * INE * IN * terface * 牛逼 * ools)!

例顏色:

from clint.textui import colored 

print 'I love ' + colored.yellow('pyt') + colored.blue('hon') 

和縮進太:

from clint.textui import colored, indent, puts 

with indent(3, quote=colored.red(' >')): 
    puts ('some random text') 
    puts ('another text') 
    with indent(3, quote=colored.green(' |')): 
     puts('some more nested identation') 
     puts('cool isn\'t?') 

P.S.同樣的作者寫了一個類似的漂亮的HTTP請求庫,名爲「requests」:https://github.com/kennethreitz/requests

+2

+1這看起來比詛咒或ANSI代碼更優雅。 –

+0

是的,非常Pythonic和自然使用。良好的抽象和界面。 – dkamins