【发布时间】:2016-05-07 16:03:17
【问题描述】:
我有一些 Django 管理命令,它们调用其他类中的方法来从 API 获取数据。这些任务可能需要很长时间才能完成,我想在控制台中以简洁的方式显示进度。
我可以使用print() 输出单行,例如“Fetched 22 of 3000”,它会覆盖自身,使用如下内容:
print('Fetched %d of %d' % (n, total) + ' '*30, end='\r')
但是使用print() 似乎有点讨厌,并且在运行测试时它会输出到控制台。所以使用logging 似乎更好,但我看不到使用它在控制台中显示单个、不断更新的“进度”行的方法。
有什么好的方法吗?
【问题讨论】:
-
如果您使用
self.stdout.write和self.stderr.write而不是print,您可以在测试中将os.devnull传递给call_command用于stdout/stderr kwargs,它不会输出到控制台。
标签: python django django-logging