123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- cmd="mkfifo backpipe"
- fname = "/home/user/backpipe" # fifo named pipe
- import json
- import sys
- import os
- import time
- import _thread as thread
- def write(data):
- txt =json.dumps(data)
- f = open(fname,"w")
- f.write(txt)
- f.close()
- def read():
- f = open(fname,"w")
- txt = f.read()
- f.close()
- txt =json.loads(txt)
- return txt
- class read_loop():
- def __init__(self):
- self.fname = fname
- #self.f = open(self.fname,"r")
- self.s = time.time()
- self.buf = []
- self.lock = thread.allocate_lock()
- self.sleep = 0
- def loop(self,sleep=0):
- print(self,self.fname)
- if sleep:
- time.sleep(sleep)
- self.sleep=sleep
- thread.start_new_thread(self._loop,())
- def read(self):
- #print("read",self)
- out = []
- self.lock.acquire()
- try:
- if self.buf:
- out = self.buf[:]
- self.buf = []
- finally:
- self.lock.release()
- return out
- def check_pipe(self):
- r=os.popen("file {}".format(self.fname))
- for i in r.readlines():
- #print([i])
- if ": fifo " in i:
- return 1
- def _loop(self):
- if self.sleep:
- time.sleep(self.sleep)
- #print("loop_start __ "*100)
- #print()
- #print("start._loop",self)
- #print(self.fname)
- while 1:
- #print(2)
- if not self.check_pipe():
- #print("FIFO PIPE ERR:",fname,"is not a pipe")
- time.sleep(1)
- continue
- self.lock.acquire()
- self.f = open(self.fname,"r")
- txt="null"
- try:
- txt = self.f.read()
- txt=txt.strip()
- txt=json.loads(txt)
- #print("read",txt)
- self.buf.append(txt)
- except KeyboardInterrupt as e:
- raise e
- except Exception as e:
- print("FIFO TXT",[txt])
- print("FIFO ERR",e)
- finally:
- self.lock.release()
- time.sleep(0.01)
- if __name__ == "__main__":
- if "server" in sys.argv:
- server = read_loop()
- server.loop()
- while 1:
- try:
- data = server.read()
- if data:
- for i in data:
- print(":",i)
- else:
- time.sleep(0.01)
- except KeyboardInterrupt as e:
- raise e
- except Exception as e:
- print("ERR1",e)
- elif "client" in sys.argv:
- i=0
- while 1:
- #msg=json.dumps({"event":"EXEC","EXEC":btn_nr,"VAL":v,"F-KEY":btn_nr_raw})#.encode("utf-8")
- #cmd = "echo '{}' > ~/backpipe ".format(msg)
- data = ["data {}".format(i)]*100
- data = {"hi":i}
- print(data)
- txt = write(data)
- time.sleep(.1)
- i+=1
|