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