6

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?

Phil Gyford
  • 13,432
  • 14
  • 81
  • 143
  • If you use `self.stdout.write` and `self.stderr.write` instead of `print`, you can pass `os.devnull` to `call_command` for stdout/stderr kwargs in your tests and it won't output to the console. – Joe Bane Mar 20 '19 at 15:42

1 Answers1

7

Maybe tqdm is a helpful python package for you.

sascha
  • 121
  • 2
  • 7