summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2011-09-25 21:16:31 +0200
committerFlorent Le Coz <louiz@louiz.org>2011-09-25 21:16:31 +0200
commit55d624c0ee0d96ee5706ccbeec91cdc6ffc0b5a7 (patch)
tree89a44e8bf88a231a6adb21b4a5fa6fcdf8c06232
parent47c052acf47848a35987c6c41d9c20d390894f3e (diff)
downloadpoezio-55d624c0ee0d96ee5706ccbeec91cdc6ffc0b5a7.tar.gz
poezio-55d624c0ee0d96ee5706ccbeec91cdc6ffc0b5a7.tar.bz2
poezio-55d624c0ee0d96ee5706ccbeec91cdc6ffc0b5a7.tar.xz
poezio-55d624c0ee0d96ee5706ccbeec91cdc6ffc0b5a7.zip
exec plugin
-rw-r--r--plugins/exec.py43
-rw-r--r--src/plugin.py1
2 files changed, 43 insertions, 1 deletions
diff --git a/plugins/exec.py b/plugins/exec.py
new file mode 100644
index 00000000..f7f451df
--- /dev/null
+++ b/plugins/exec.py
@@ -0,0 +1,43 @@
+# 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
diff --git a/src/plugin.py b/src/plugin.py
index d64679a1..d332ca01 100644
--- a/src/plugin.py
+++ b/src/plugin.py
@@ -42,7 +42,6 @@ class BasePlugin(object):
pass
def unload(self):
-
self.cleanup()
def add_command(self, name, handler, help, completion=None):