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:
parent
d11ea32f0b
commit
4b0d9a2872
1 changed files with 42 additions and 0 deletions
42
plugins/pipe_cmd.py
Normal file
42
plugins/pipe_cmd.py
Normal 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
|
Loading…
Reference in a new issue