You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							52 lines
						
					
					
						
							1.3 KiB
						
					
					
				| import os
 | |
| import subprocess
 | |
| from openpilot.common.basedir import BASEDIR
 | |
| 
 | |
| 
 | |
| class Spinner():
 | |
|   def __init__(self):
 | |
|     try:
 | |
|       self.spinner_proc = subprocess.Popen(["./spinner"],
 | |
|                                            stdin=subprocess.PIPE,
 | |
|                                            cwd=os.path.join(BASEDIR, "selfdrive", "ui"),
 | |
|                                            close_fds=True)
 | |
|     except OSError:
 | |
|       self.spinner_proc = None
 | |
| 
 | |
|   def __enter__(self):
 | |
|     return self
 | |
| 
 | |
|   def update(self, spinner_text: str):
 | |
|     if self.spinner_proc is not None:
 | |
|       self.spinner_proc.stdin.write(spinner_text.encode('utf8') + b"\n")
 | |
|       try:
 | |
|         self.spinner_proc.stdin.flush()
 | |
|       except BrokenPipeError:
 | |
|         pass
 | |
| 
 | |
|   def update_progress(self, cur: float, total: float):
 | |
|     self.update(str(round(100 * cur / total)))
 | |
| 
 | |
|   def close(self):
 | |
|     if self.spinner_proc is not None:
 | |
|       self.spinner_proc.kill()
 | |
|       try:
 | |
|         self.spinner_proc.communicate(timeout=2.)
 | |
|       except subprocess.TimeoutExpired:
 | |
|         print("WARNING: failed to kill spinner")
 | |
|       self.spinner_proc = None
 | |
| 
 | |
|   def __del__(self):
 | |
|     self.close()
 | |
| 
 | |
|   def __exit__(self, exc_type, exc_value, traceback):
 | |
|     self.close()
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|   import time
 | |
|   with Spinner() as s:
 | |
|     s.update("Spinner text")
 | |
|     time.sleep(5.0)
 | |
|   print("gone")
 | |
|   time.sleep(5.0)
 | |
| 
 |