64 lines
1.5 KiB
Python
64 lines
1.5 KiB
Python
|
#!/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")
|