部分carraige返回python

时间:2016-03-08 17:24:54

标签: python nose carriage-return

我试图在nosetests中添加打印件,显示测试已经过了多少,但我不想使用完整的回车。

应该看起来像:

my_test_module.MyTestCase.test_somthing 10%

my_test_module.MyTestCase.test_somthing 20%

...

my_test_module.MyTestCase.test_somthing 100%

my_test_module.MyTestCase.test_somthing ok

都在同一行。

我无法使用" \ r"因为它会覆盖整行。我需要一种方法来使用一些"部分回车"给定数量的字母。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您知道测试类和方法,因为您正在打印进度,因此您可以使用'\r'并在完成时打印前缀

from sys import stderr
import time

for i in range(10, 100, 10):
    print('\rmy_test_module.MyTestCase.test_somthing: {} %'.format(i), end='', file=stderr)
    time.sleep(1)

print('\rmy_test_module.MyTestCase.test_somthing: ok  ', file=stderr)

如果没有,那么您可以使用退格\010

from sys import stderr
import time

class BsPrinter:
    def __init__(self):
        self.previous_length = 0

    def output(self, msg):
        print('\010' * self.previous_length + msg, end='', file=stderr)
        self.previous_length = len(msg)

print('my_test_module.MyTestCase.test_somthing: ', end='', file=sys.stderr)
bs = BsPrinter()
for i in range(10, 100, 10):
    bs.output('{} %'.format(i))
    time.sleep(1)

bs.output('')
print('ok', file=stderr)

答案 1 :(得分:1)

您也可以选择:

import sys
import time

print("hello", end="")
sys.stdout.flush()
time.sleep(10)
print("\b\b\b\b\bworld", end="")

'\ b'是退格符。这应该允许你备份和覆盖部分行,但我认为只需重新打印整行,因为在另一个答案中更容易和更清洁。