2

我有一个广泛使用 Python(2.* 风格)的项目,我想知道是否有终端菜单库或类似的东西?我希望通过使用箭头键突出显示选项、一些颜色等来简化一些选项,从而为我的脚本注入一些风味和活力。我隐约记得有一种方法可以制作 bash shell 终端菜单,但我不在确定我将如何将用户输入从 bash 传递到 python 脚本,也许有一个 bash 终端菜单用 sysargs 推送脚本调用?如果可能的话,我想要 python 方面的东西。有什么建议么?

也只是一个随机的问题,因为我们讨论的是终端美学这个话题,所以这里很适合,处理柜台的最佳方式是什么?我的脚本查找图像文件,然后当它找到一个时,它通过子进程调用清除终端以清除,然后再次打印找到的总图像 IE 10 图像,找到一个,清除,打印“找到 11 个图像”,有时我的脚本有效真的很快,我觉得这会损害性能。想法?

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

编辑 - 感谢所有快速回复!我有很多选择要考虑。我给了每个人一个赞成票,因为您的所有回答都很有帮助。当我回到家时,我会查看所有的图书馆,并尝试根据最佳答案选择你们中的一个作为答案,但希望我能选择你们所有人,因为你的所有答案都是相关的!非常感谢各位。下班回家后我会回来报告并有机会编写一些代码;)

编辑 2 - 计数器/进度显示的说明,当我的脚本在很短的时间内找到数千张图像时,寻找一种方法来防止这种情况损害性能,这是真正切碎的 python ...

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

再次感谢!

4

3 回答 3

5

看看Clint (* C *command * L *ine * IN *terface * T *tools)!

示例颜色:

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?')

PS 同一作者写了一个类似的不错的 HTTP 请求库,叫做“requests”:https ://github.com/kennethreitz/requests

于 2012-12-03T16:37:00.967 回答
4

如果你想要大量控制并且你在 *nix 上,你可以使用 stdlib curses 模块

如果你只是想要一点颜色(/不想修改你的脚本以适应curses),你可以使用ANSI 转义码。例如:

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

将打印“绿色”字样...绿色。

这是我使用回车提出的加载栏(基于此论坛中的答案):

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 上,但它是彩色的——黄色表示加载,红色表示中止,绿色表示完成。)

于 2012-12-03T15:53:42.893 回答
2

有一个名为Urwid的库,提供菜单等。我从未将它用于严肃的目的,但根据我的初步经验,它工作得很好。它仅适用于 Un*x 系统。(项目页面说它在 Cygwin 下工作,但我从未尝试过。)

于 2012-12-03T16:06:13.213 回答