poezio/plugins/pipe_cmd.py

43 lines
935 B
Python
Raw Normal View History

"""
This plugins allows commands to be sent to poezio via a named pipe.
"""
from plugin import BasePlugin
import threading
import os
import stat
import logging
log = logging.getLogger(__name__)
PIPENAME = "/tmp/poezio.fifo"
class Plugin(BasePlugin):
def init(self):
self.stop = False
self.pipename = self.config.get("pipename", PIPENAME)
if not os.path.exists(self.pipename):
os.mkfifo(self.pipename)
if not stat.S_ISFIFO(os.stat(self.pipename).st_mode):
log.error("File %s is not a fifo file" % self.pipename)
raise TypeError
thread = threading.Thread(target=self.main_loop)
thread.start()
def main_loop(self):
while not self.stop:
fd = open(self.pipename, 'r')
line = fd.read().strip()
self.api.run_command(line)
fd.close()
def cleanup(self):
self.stop = True