123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- cmd="mkfifo backpipe"
- fname = "/home/user/backpipe"
- 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.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):
-
- 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():
-
- if ": fifo " in i:
- return 1
- def _loop(self):
- if self.sleep:
- time.sleep(self.sleep)
-
-
-
-
- while 1:
-
- if not self.check_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)
-
- 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:
-
-
- data = ["data {}".format(i)]*100
- data = {"hi":i}
- print(data)
- txt = write(data)
- time.sleep(.1)
- i+=1
|