From 4b0d9a2872050c704ad39c4228a7dc634ae29554 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Sat, 5 Jul 2014 17:05:17 +0200 Subject: Add the pipe_cmd plugin This plugins lets the user manipulate a poezio instance by writing commands into a pipe, read by poezio which will execute them. --- plugins/pipe_cmd.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 plugins/pipe_cmd.py (limited to 'plugins') diff --git a/plugins/pipe_cmd.py b/plugins/pipe_cmd.py new file mode 100644 index 00000000..c73bdea5 --- /dev/null +++ b/plugins/pipe_cmd.py @@ -0,0 +1,42 @@ +""" + +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 -- cgit v1.2.3