#!/usr/bin/python3 import os import sys import queue import threading command_queue = queue.Queue() fifo_file = "/tmp/my_fifo" def listen_to_fifo(queue): if not os.path.exists(fifo_file): os.mkfifo(fifo_file) with open(fifo_file, 'r') as f: while True: data = f.readline().strip() if not data: break queue.put(data) def read_queue(queue): while True: data = queue.get() if data == "reboot": fifo_file.close() os.execv(sys.executable, [sys.executable] + sys.argv) print(data) sys.stdout.flush() queue.task_done() if __name__ == '__main__': t1 = threading.Thread(target=listen_to_fifo, args=(command_queue,)) t2 = threading.Thread(target=read_queue, args=(command_queue,)) t1.start() t2.start() command_queue.join()