]> 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.path.exists(fifo_path) and
24          stat.S_ISFIFO(os.stat(fifo_path).st_mode) ):
25     print("Channel %s does not exist!" % sys.argv[1], file=sys.stderr)
26     sys.exit(3)
27
28 for i in range(0, 10):
29     fifo = -1
30     try:
31         fifo = posix.open(fifo_path, posix.O_WRONLY | posix.O_NONBLOCK)
32         posix.write(fifo, sys.stdin.read().encode())
33         sys.exit(0)
34     except OSError as e:
35         if e.errno == errno.ENXIO:
36             time.sleep(1.0)
37     finally:
38         if fifo != -1:
39             posix.close(fifo)
40
41 print("Error posting to channel %s!" % sys.argv[1], file=sys.stderr)
42 sys.exit(4)