123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/usr/bin/env python3
- import os
- import time
- import subprocess
- from openpilot.common.basedir import BASEDIR
- class TextWindow:
- def __init__(self, text):
- try:
- self.text_proc = subprocess.Popen(["./text", text],
- stdin=subprocess.PIPE,
- cwd=os.path.join(BASEDIR, "selfdrive", "ui"),
- close_fds=True)
- except OSError:
- self.text_proc = None
- def get_status(self):
- if self.text_proc is not None:
- self.text_proc.poll()
- return self.text_proc.returncode
- return None
- def __enter__(self):
- return self
- def close(self):
- if self.text_proc is not None:
- self.text_proc.terminate()
- self.text_proc = None
- def wait_for_exit(self):
- if self.text_proc is not None:
- while True:
- if self.get_status() == 1:
- return
- time.sleep(0.1)
- def __del__(self):
- self.close()
- def __exit__(self, exc_type, exc_value, traceback):
- self.close()
- if __name__ == "__main__":
- text = """Traceback (most recent call last):
- File "./controlsd.py", line 608, in <module>
- main()
- File "./controlsd.py", line 604, in main
- controlsd_thread(sm, pm, logcan)
- File "./controlsd.py", line 455, in controlsd_thread
- 1/0
- ZeroDivisionError: division by zero"""
- print(text)
- with TextWindow(text) as s:
- for _ in range(100):
- if s.get_status() == 1:
- print("Got exit button")
- break
- time.sleep(0.1)
- print("gone")
|