fifo.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. cmd="mkfifo backpipe"
  2. fname = "/home/user/backpipe" # fifo named pipe
  3. import json
  4. import sys
  5. import time
  6. import _thread as thread
  7. def write(data):
  8. txt =json.dumps(data)
  9. f = open(fname,"w")
  10. f.write(txt)
  11. f.close()
  12. def read():
  13. f = open(fname,"w")
  14. txt = f.read()
  15. f.close()
  16. txt =json.loads(txt)
  17. return txt
  18. class read_loop():
  19. def __init__(self):
  20. self.fname = fname
  21. #self.f = open(self.fname,"r")
  22. self.s = time.time()
  23. self.buf = []
  24. self.lock = thread.allocate_lock()
  25. def loop(self):
  26. thread.start_new_thread(self._loop,())
  27. def read(self):
  28. #print("read",self)
  29. out = []
  30. self.lock.acquire()
  31. try:
  32. if self.buf:
  33. out = self.buf[:]
  34. self.buf = []
  35. finally:
  36. self.lock.release()
  37. return out
  38. def _loop(self):
  39. print("start._loop",self)
  40. while 1:
  41. #print(2)
  42. self.lock.acquire()
  43. self.f = open(self.fname,"r")
  44. #print(1)
  45. txt="null"
  46. try:
  47. txt = self.f.read()
  48. txt=txt.strip()
  49. txt=json.loads(txt)
  50. #print("read",txt)
  51. self.buf.append(txt)
  52. except KeyboardInterrupt as e:
  53. raise e
  54. except Exception as e:
  55. print("TXT",[txt])
  56. print("ERR",e)
  57. finally:
  58. self.lock.release()
  59. time.sleep(0.01)
  60. if __name__ == "__main__":
  61. if "server" in sys.argv:
  62. server = read_loop()
  63. server.loop()
  64. while 1:
  65. try:
  66. data = server.read()
  67. if data:
  68. for i in data:
  69. print(":",i)
  70. else:
  71. time.sleep(0.01)
  72. except KeyboardInterrupt as e:
  73. raise e
  74. except Exception as e:
  75. print("ERR1",e)
  76. elif "client" in sys.argv:
  77. i=0
  78. while 1:
  79. #msg=json.dumps({"event":"EXEC","EXEC":btn_nr,"VAL":v,"F-KEY":btn_nr_raw})#.encode("utf-8")
  80. #cmd = "echo '{}' > ~/backpipe ".format(msg)
  81. data = ["data {}".format(i)]*100
  82. data = {"hi":i}
  83. print(data)
  84. txt = write(data)
  85. time.sleep(.1)
  86. i+=1