From 4865a22f788e0997771d15e00d2d895d904eb92a Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Thu, 7 May 2015 10:14:51 +0100
Subject: [PATCH] tools/pyboard.py: Add "--follow" option to wait for output
 indefinitely.

Also flush stdout so you can see output as it comes.
---
 tools/pyboard.py | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/tools/pyboard.py b/tools/pyboard.py
index 0374893a8..efb43f26c 100755
--- a/tools/pyboard.py
+++ b/tools/pyboard.py
@@ -35,6 +35,7 @@ import serial
 
 def stdout_write_bytes(b):
     sys.stdout.buffer.write(b)
+    sys.stdout.buffer.flush()
 
 class PyboardError(BaseException):
     pass
@@ -207,6 +208,7 @@ def main():
     import argparse
     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('--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('files', nargs='*', help='input files')
     args = cmd_parser.parse_args()
@@ -214,10 +216,14 @@ def main():
     if args.test:
         run_test(device=args.device)
 
-    if len(args.files) == 0:
+    for filename in args.files:
         try:
             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()
         except PyboardError as er:
             print(er)
@@ -228,14 +234,10 @@ def main():
             stdout_write_bytes(ret_err)
             sys.exit(1)
 
-    for filename in args.files:
+    if args.follow or len(args.files) == 0:
         try:
             pyb = Pyboard(args.device)
-            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()
+            ret, ret_err = pyb.follow(timeout=None, data_consumer=stdout_write_bytes)
             pyb.close()
         except PyboardError as er:
             print(er)
-- 
GitLab