Commit 55d624c0 authored by louiz’'s avatar louiz’

exec plugin

parent 47c052ac
# A plugin that can execute a command and send the result in the conversation
from plugin import BasePlugin
import os
import common
import shlex
import subprocess
class Plugin(BasePlugin):
def init(self):
self.add_command('exec', self.command_exec, "Usage: /exec [-o|-O] <command>\nExec: Execute a shell command and prints the result in the information buffer. The command should be ONE argument, that means it should be between \"\". The first argument (before the command) can be -o or -O. If -o is specified, it sends the result in the current conversation. If -O is specified, it sends the command and its result in the current conversation.\nExample: /exec -O \"uptime\" will send “uptime\n20:36:19 up 3:47, 4 users, load average: 0.09, 0.13, 0.09” in the current conversation.")
def command_exec(self, args):
args = common.shell_split(args)
if len(args) == 1:
command = args[0]
arg = None
elif len(args) == 2:
command = args[1]
arg = args[0]
else:
self.core.command_help('exec')
return
try:
cut_command = shlex.split(command)
except Exception as e:
self.core.information('Failed to parse command: %s' % (e,), 'Error')
return
try:
process = subprocess.Popen(cut_command, stdout=subprocess.PIPE)
except OSError as e:
self.core.information('Failed to execute command: %s' % (e,), 'Error')
return
result = process.communicate()[0].decode('utf-8')
if arg and arg == '-o':
if not self.core.send_message('%s' % (result,)):
self.core.information('Cannot send result (%s), this is not a conversation tab' % result)
elif arg and arg == '-O':
if not self.core.send_message('%s:\n%s' % (command, result)):
self.core.information('Cannot send result (%s), this is not a conversation tab' % result)
else:
self.core.information('%s:\n%s' % (command, result), 'Info')
return
......@@ -42,7 +42,6 @@ class BasePlugin(object):
pass
def unload(self):
self.cleanup()
def add_command(self, name, handler, help, completion=None):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment