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.
This commit is contained in:
Florent Le Coz 2014-07-05 17:05:17 +02:00
parent d11ea32f0b
commit 4b0d9a2872

42
plugins/pipe_cmd.py Normal file
View file

@ -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