]> git.treefish.org Git - mtxbot.git/blob - src/mtxbot-post.py
fix fifo check
[mtxbot.git] / src / mtxbot-post.py
1 #!/usr/bin/env python3
2
3 import errno
4 import os
5 import posix
6 import stat
7 import sys
8 import time
9
10 assert sys.version_info >= (3, 5)
11
12 if len(sys.argv) != 2:
13     print("Usage: %s <channel>" % sys.argv[0])
14     sys.exit(1)
15
16 fifo_dir = os.getenv('MTXBOT_FIFO_DIR', '/run/mtxbot')
17 fifo_path = "%s/%s" % (fifo_dir, sys.argv[1])
18
19 if not os.path.isdir(fifo_dir):
20     print("Fifo directory %s does not exist!" % fifo_dir, file=sys.stderr)
21     sys.exit(2)
22
23 if not ( os.exists(fifo_path) and stat.S_ISFIFO(os.stat(fifo_path).st_mode) ):
24     print("Channel %s does not exist!" % sys.argv[1], file=sys.stderr)
25     sys.exit(3)
26
27 for i in range(0, 10):
28     fifo = -1
29     try:
30         fifo = posix.open(fifo_path, posix.O_WRONLY | posix.O_NONBLOCK)
31         posix.write(fifo, sys.stdin.read().encode())
32         sys.exit(0)
33     except OSError as e:
34         if e.errno == errno.ENXIO:
35             time.sleep(1.0)
36     finally:
37         if fifo != -1:
38             posix.close(fifo)
39
40 print("Error posting to channel %s!" % sys.argv[1], file=sys.stderr)
41 sys.exit(4)