diff options
Diffstat (limited to 'progress.py')
-rw-r--r-- | progress.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/progress.py b/progress.py index 7d4f71f1..1eff04ac 100644 --- a/progress.py +++ b/progress.py | |||
@@ -21,6 +21,11 @@ from repo_trace import IsTrace | |||
21 | 21 | ||
22 | _NOT_TTY = not os.isatty(2) | 22 | _NOT_TTY = not os.isatty(2) |
23 | 23 | ||
24 | # This will erase all content in the current line (wherever the cursor is). | ||
25 | # It does not move the cursor, so this is usually followed by \r to move to | ||
26 | # column 0. | ||
27 | CSI_ERASE_LINE = '\x1b[2K' | ||
28 | |||
24 | class Progress(object): | 29 | class Progress(object): |
25 | def __init__(self, title, total=0, units='', print_newline=False, | 30 | def __init__(self, title, total=0, units='', print_newline=False, |
26 | always_print_percentage=False): | 31 | always_print_percentage=False): |
@@ -47,7 +52,8 @@ class Progress(object): | |||
47 | return | 52 | return |
48 | 53 | ||
49 | if self._total <= 0: | 54 | if self._total <= 0: |
50 | sys.stderr.write('\r%s: %d, ' % ( | 55 | sys.stderr.write('%s\r%s: %d,' % ( |
56 | CSI_ERASE_LINE, | ||
51 | self._title, | 57 | self._title, |
52 | self._done)) | 58 | self._done)) |
53 | sys.stderr.flush() | 59 | sys.stderr.flush() |
@@ -56,7 +62,8 @@ class Progress(object): | |||
56 | 62 | ||
57 | if self._lastp != p or self._always_print_percentage: | 63 | if self._lastp != p or self._always_print_percentage: |
58 | self._lastp = p | 64 | self._lastp = p |
59 | sys.stderr.write('\r%s: %3d%% (%d%s/%d%s)%s' % ( | 65 | sys.stderr.write('%s\r%s: %3d%% (%d%s/%d%s)%s' % ( |
66 | CSI_ERASE_LINE, | ||
60 | self._title, | 67 | self._title, |
61 | p, | 68 | p, |
62 | self._done, self._units, | 69 | self._done, self._units, |
@@ -69,13 +76,15 @@ class Progress(object): | |||
69 | return | 76 | return |
70 | 77 | ||
71 | if self._total <= 0: | 78 | if self._total <= 0: |
72 | sys.stderr.write('\r%s: %d, done. \n' % ( | 79 | sys.stderr.write('%s\r%s: %d, done.\n' % ( |
80 | CSI_ERASE_LINE, | ||
73 | self._title, | 81 | self._title, |
74 | self._done)) | 82 | self._done)) |
75 | sys.stderr.flush() | 83 | sys.stderr.flush() |
76 | else: | 84 | else: |
77 | p = (100 * self._done) / self._total | 85 | p = (100 * self._done) / self._total |
78 | sys.stderr.write('\r%s: %3d%% (%d%s/%d%s), done. \n' % ( | 86 | sys.stderr.write('%s\r%s: %3d%% (%d%s/%d%s), done.\n' % ( |
87 | CSI_ERASE_LINE, | ||
79 | self._title, | 88 | self._title, |
80 | p, | 89 | p, |
81 | self._done, self._units, | 90 | self._done, self._units, |