I have some Django management commands that call methods in other classes to fetch data from APIs. These tasks can take a long time to complete, and I'd like to show progress in the console in a concise manner.
I could use print()
to output a single line like "Fetched 22 of 3000" that writes over itself, using something like:
print('Fetched %d of %d' % (n, total) + ' '*30, end='\r')
But using print()
seems a bit nasty, and it gets output to the console when tests are run. So it seems better to use logging, but I can't see a way using that to display a single, constantly updated, "progress" line in the console.
Is there a nice way to do this?
self.stdout.write
andself.stderr.write
instead ofprint
, you can passos.devnull
tocall_command
for stdout/stderr kwargs in your tests and it won't output to the console. – Prager