实时更新命令提示文本

时间:2018-03-01 02:07:50

标签: python

有办法做到这一点吗?

例如:

我有一个词典

sounds = {
        'sound1.mp3': 0,
        'sound2.mp3': 0,
        'sound3.mp3': 0
    }

当键值(此ex中的sound1)更新时,命令提示符将来自

sound1.mp3: 0
sound2.mp3: 0
sound3.mp3: 0

to

sound1.mp3: 1
sound2.mp3: 0
sound3.mp3: 0

2 个答案:

答案 0 :(得分:0)

这是一个关于我所说的简单演示:

class Holder(object):
    def __init__(self, init_dict):
        self.dict = init_dict

    def increase(self, key):
        if key in self.dict:
            d = {key: self.dict[key] + 1}
            self.update(d)

    def update(self, d):
        self.dict.update(d)
        self.print_prompt()

    def print_prompt(self):
        for key in sorted(self.dict.keys()):
            print '%s: %d' % (key, self.dict[key])
        print


def main():
    sounds = {
        'sound1.mp3': 0,
        'sound2.mp3': 0,
        'sound3.mp3': 0
    }

    holder = Holder(sounds)
    holder.print_prompt()
    holder.increase('sound1.mp3')

    holder.update({
        'sound1.mp3': 3,
        'sound2.mp3': 2,
        'sound3.mp3': 1
    })


if __name__ == '__main__':
    main()

输出结果为:

sound1.mp3: 0
sound2.mp3: 0
sound3.mp3: 0

sound1.mp3: 1
sound2.mp3: 0
sound3.mp3: 0

sound1.mp3: 3
sound2.mp3: 2
sound3.mp3: 1

答案 1 :(得分:0)

如果您正在使用终端,可以使用for i in range(10): time.sleep(1) print(i, end="\r") 字符(回车)将输出返回到行的开头。

例如,我们可以做

>>>

请注意,提示符(在IDLE中)将覆盖{{1}}的最后一次迭代。这是因为在命令提示符下,它实际上将下一个字符指针移动到行的开头。

如果您想避免这种情况,请稍后再打印一个空行。

据我所知,重新打印前一行的唯一方法是清除屏幕。有关如何清除整个屏幕,请参阅This questionThis question