如何使用python在shell中输入类似bar的进度

时间:2014-02-05 12:17:53

标签: python bash scripting

我想知道如何正确解决类似的问题:

Python Progress Bar

除了一个例外,我的脚本使用了一个新的行字符,它看起来像这样:

#!/usr/bin/env python

import time
import sys
import random

total = 100
progress = 0

for i in xrange(0, 100):
    time.sleep(0.01)
    progress += 1
    random_word = 'a' * random.randint(1, 10)
    random_int = random.randint(4, 12)
    how_many_characters = 99
    sys.stdout.write("%d/100 %s\n" % (progress, random_word * random_int))
    sys.stdout.write("\b" * how_many_characters)

这一行

sys.stdout.write("\b" * how_many_characters)

是问题。

如何确定上一行开始的位置以及它有多长?或者如何移动到前一行的第一个字符?或者我还能做些什么?我想要实现的是改变已显示的文本

1/100 Crazy white fox jumping over fence\n

分为:

2/100 Crazy white fox jumping over fence\n

额外要求:

  • 我无法删除原始句子中的尾随\ n
  • 我知道进度条显示在上一行的开头

编辑。

改进问题以消除歧义。

2 个答案:

答案 0 :(得分:0)

试试这个:)

import time
import sys

total = 100
progress = 0

for i in xrange(0, 9):
    time.sleep(0.01)
    progress += 1
    sys.stdout.write("\b"*5)
    sys.stdout.write("%d/100" % progress)
    sys.stdout.flush()
for i in xrange(10, 100):
    time.sleep(0.01)
    progress += 1
    sys.stdout.write("\b"*6)
    sys.stdout.write("%d/100" % progress)
    sys.stdout.flush()

time.sleep(0.01)
progress += 1
sys.stdout.write("\b"*7)
sys.stdout.write("%d/100" % progress)
sys.stdout.flush()


sys.stdout.write("\n")

答案 1 :(得分:0)

我了解您要从评论中删除以前的进度指示器。

您应该删除换行符,将sys.stdout.write("%d/100\n" % progress)替换为sys.stdout.write("%d/100" % progress),以便将其删除。