首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python终端菜单?终端着色?终端进度显示?

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

Stack Overflow用户
提问于 2012-12-03 23:48:55
回答 3查看 4.3K关注 0票数 2

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

还有一个随机问题,既然我们在终端美学的主题上,那么处理计数器的最好方法是什么?我的脚本寻找图像文件,然后当它找到一个时,它用子进程调用清除终端,然后打印找到的总图像IE 10图像,找到一个,清除,打印“找到11个图像”,有时我的脚本运行得很快,我觉得这会影响性能。有什么想法?

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

编辑-感谢所有的快速响应!我有很多选择要考虑。我给了每个人一张赞成票,因为你的所有回复都很有帮助。当我回到家时,我会检查所有的库,并试着从你们中挑选一个答案,这取决于什么是最好的,希望我可以选择你们所有人,因为你们所有的答案都是相关的!非常感谢各位。

编辑2-澄清计数器/进度显示,当我的脚本在很短的时间内找到数千张图像时,寻找一种方法来防止这一点损害性能,这是真正的拆分python……

代码语言:javascript
复制
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."

再次感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-04 00:06:13

有一个名为Urwid的库,它提供菜单等功能。我从来没有将它用于严肃的目的,但根据我对它的初步经验,它工作得很好。不过,它只能在Un*x系统上运行。(项目页面上说它可以在Cygwin下工作,但我从来没有试过。)

票数 2
EN

Stack Overflow用户

发布于 2012-12-04 00:37:01

查看Clint (*C*命令*L*ine *IN*ine *T*ools)!

https://github.com/kennethreitz/clint

  • Great概述:http://www.nicosphere.net/clint-command-line-library-for-python/

  • 官方页面

示例颜色:

代码语言:javascript
复制
from clint.textui import colored

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

也可以缩进:

代码语言:javascript
复制
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?')

同一位作者写了一个类似的很好的HTTP请求库,叫做"requests":https://github.com/kennethreitz/requests

票数 5
EN

Stack Overflow用户

发布于 2012-12-03 23:53:43

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

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

代码语言:javascript
复制
print '\033[1;32mgreen\033[1;m'

会把“绿色”这个词印成彩色的。绿色。

这是我用回车符设计的一个加载栏(基于this forum中的答案):

代码语言:javascript
复制
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)

输出示例:

代码语言:javascript
复制
Loading: [|||||||||||||||||||||||||||||||||||||||||         ] 82%

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13686781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档