我试图在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"因为它会覆盖整行。我需要一种方法来使用一些"部分回车"给定数量的字母。
我该怎么做?
答案 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'是退格符。这应该允许你备份和覆盖部分行,但我认为只需重新打印整行,因为在另一个答案中更容易和更清洁。