diff options
author | Rob Knegjens <rob@knegjens.net> | 2022-04-05 16:05:28 -0700 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2022-04-11 15:04:20 +1000 |
commit | 56978c3dde3440367438a89353ba73b32c8cdbc2 (patch) | |
tree | b1ccbb419c1b7475dc3589da305d1c252805e11b /tools/pyboard.py | |
parent | b59989f40edeca1a7c239eb017c353010e1837d7 (diff) | |
download | micropython-56978c3dde3440367438a89353ba73b32c8cdbc2.tar.gz micropython-56978c3dde3440367438a89353ba73b32c8cdbc2.zip |
tools/mpremote: Show progress indicator when copying large files.
When copying large files (> 2048 bytes) to or from a device with
`mpremote cp` a progress bar and percentage counter are temporarily shown.
Diffstat (limited to 'tools/pyboard.py')
-rwxr-xr-x | tools/pyboard.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/tools/pyboard.py b/tools/pyboard.py index 15ddfd745d..a9a4cbff87 100755 --- a/tools/pyboard.py +++ b/tools/pyboard.py @@ -491,7 +491,10 @@ class Pyboard: ) self.exec_(cmd, data_consumer=stdout_write_bytes) - def fs_get(self, src, dest, chunk_size=256): + def fs_get(self, src, dest, chunk_size=256, progress_callback=None): + if progress_callback: + src_size = int(self.exec_("import os\nprint(os.stat('%s')[6])" % src)) + written = 0 self.exec_("f=open('%s','rb')\nr=f.read" % src) with open(dest, "wb") as f: while True: @@ -507,9 +510,15 @@ class Pyboard: if not data: break f.write(data) + if progress_callback: + written += len(data) + progress_callback(written, src_size) self.exec_("f.close()") - def fs_put(self, src, dest, chunk_size=256): + def fs_put(self, src, dest, chunk_size=256, progress_callback=None): + if progress_callback: + src_size = os.path.getsize(src) + written = 0 self.exec_("f=open('%s','wb')\nw=f.write" % dest) with open(src, "rb") as f: while True: @@ -520,6 +529,9 @@ class Pyboard: self.exec_("w(b" + repr(data) + ")") else: self.exec_("w(" + repr(data) + ")") + if progress_callback: + written += len(data) + progress_callback(written, src_size) self.exec_("f.close()") def fs_mkdir(self, dir): @@ -546,7 +558,7 @@ def execfile(filename, device="/dev/ttyACM0", baudrate=115200, user="micro", pas pyb.close() -def filesystem_command(pyb, args): +def filesystem_command(pyb, args, progress_callback=None): def fname_remote(src): if src.startswith(":"): src = src[1:] @@ -579,7 +591,7 @@ def filesystem_command(pyb, args): src = fname_remote(src) dest2 = fname_cp_dest(src, dest) print(fmt % (src, dest2)) - op(src, dest2) + op(src, dest2, progress_callback=progress_callback) else: op = { "ls": pyb.fs_ls, |