2012-12-03 84 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