Python终端菜单?终端着色?终端进度显示?

时间:2012-12-03 15:48:55

标签: python bash menu terminal

我有一个广泛使用Python(2. * flavors)的项目,我想知道是否有终端菜单库或其他东西?我希望通过使用箭头键高亮显示选项,某些颜色等简化一些选项来为我的脚本注入一些味道和生活。我隐约回想起有一种方法来制作一个bash shell终端菜单,但我不在我确定如何将用户输入从bash传递给python脚本,也许有一个bash终端菜单用sysarggs推送脚本调用?如果可能的话,我想在python方面做点什么。有什么建议吗?

这也只是一个随机的问题,因为我们关于终端美学的主题,这里有什么样的适合,处理柜台的最佳方法是什么?我的脚本查找图像文件,然后当它找到一个它清除终端时,通过子进程调用清除然后打印出再次找到IE 10图像的总图像,找到一个,清除,打印“找到11个图像”,有时我的脚本工作真快,我感觉到这种不利表现。想法?

非常感谢大家,我喜欢堆栈溢出;)

编辑 - 感谢所有快速回复!我有很多选择可以考虑。我给了每个人一个upvote,因为你的所有回复都很有帮助。当我回到家时,我会检查所有的图书馆并尝试根据最好的东西选择你们中的一个,但是我希望我能挑选你们,因为你们所有的答案都是相关的!非常感谢人们。我将在下班回家后报告,并有机会获得编码;)

编辑2 - 对计数器/进度显示的澄清,寻找一种方法来防止在我的脚本在很短的时间内发现成千上万的图像时不利于性能,这是真正的切碎python ... < / p>

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."

再次感谢!

3 个答案:

答案 0 :(得分:5)

查看 Clint (* C * ommand * L * 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。同一位作者写了一个名为“requests”的类似的HTTP请求库:https://github.com/kennethreitz/requests

答案 1 :(得分: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%

(虽然它没有显示在SO上,但它的颜色为黄色表示加载,红色表示中止,绿色表示已完成。)

答案 2 :(得分:2)

有一个名为Urwid的图书馆,提供菜单等等。我从来没有将它用于严肃的目的,但它的初步经验对它起作用相当不错。它仅适用于Un * x系统。 (项目页面说它在Cygwin下运行,但我从未尝试过。)