Commit 4865a22f authored by Damien George's avatar Damien George
Browse files

tools/pyboard.py: Add "--follow" option to wait for output indefinitely.

Also flush stdout so you can see output as it comes.
parent ff987ccf
...@@ -35,6 +35,7 @@ import serial ...@@ -35,6 +35,7 @@ import serial
def stdout_write_bytes(b): def stdout_write_bytes(b):
sys.stdout.buffer.write(b) sys.stdout.buffer.write(b)
sys.stdout.buffer.flush()
class PyboardError(BaseException): class PyboardError(BaseException):
pass pass
...@@ -207,6 +208,7 @@ def main(): ...@@ -207,6 +208,7 @@ def main():
import argparse import argparse
cmd_parser = argparse.ArgumentParser(description='Run scripts on the pyboard.') cmd_parser = argparse.ArgumentParser(description='Run scripts on the pyboard.')
cmd_parser.add_argument('--device', default='/dev/ttyACM0', help='the serial device of the pyboard') cmd_parser.add_argument('--device', default='/dev/ttyACM0', help='the serial device of the pyboard')
cmd_parser.add_argument('--follow', action='store_true', help='follow the output after running the scripts [default if no scripts given]')
cmd_parser.add_argument('--test', action='store_true', help='run a small test suite on the pyboard') cmd_parser.add_argument('--test', action='store_true', help='run a small test suite on the pyboard')
cmd_parser.add_argument('files', nargs='*', help='input files') cmd_parser.add_argument('files', nargs='*', help='input files')
args = cmd_parser.parse_args() args = cmd_parser.parse_args()
...@@ -214,10 +216,14 @@ def main(): ...@@ -214,10 +216,14 @@ def main():
if args.test: if args.test:
run_test(device=args.device) run_test(device=args.device)
if len(args.files) == 0: for filename in args.files:
try: try:
pyb = Pyboard(args.device) pyb = Pyboard(args.device)
ret, ret_err = pyb.follow(timeout=None, data_consumer=stdout_write_bytes) pyb.enter_raw_repl()
with open(filename, 'rb') as f:
pyfile = f.read()
ret, ret_err = pyb.exec_raw(pyfile, timeout=None, data_consumer=stdout_write_bytes)
pyb.exit_raw_repl()
pyb.close() pyb.close()
except PyboardError as er: except PyboardError as er:
print(er) print(er)
...@@ -228,14 +234,10 @@ def main(): ...@@ -228,14 +234,10 @@ def main():
stdout_write_bytes(ret_err) stdout_write_bytes(ret_err)
sys.exit(1) sys.exit(1)
for filename in args.files: if args.follow or len(args.files) == 0:
try: try:
pyb = Pyboard(args.device) pyb = Pyboard(args.device)
pyb.enter_raw_repl() ret, ret_err = pyb.follow(timeout=None, data_consumer=stdout_write_bytes)
with open(filename, 'rb') as f:
pyfile = f.read()
ret, ret_err = pyb.exec_raw(pyfile, timeout=None, data_consumer=stdout_write_bytes)
pyb.exit_raw_repl()
pyb.close() pyb.close()
except PyboardError as er: except PyboardError as er:
print(er) print(er)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment