Snippet: caller.py (0.2)
2011/05/01 Deja un comentario
Durante la Organizacion del Pyday hice unos cuantos snippets que me sirvieron para generar cosas y demas, uno de ellos es este.
Para X-ip caller.py 0.2, en el cual elimine la clase Caller y la reemplace por una funcion.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# caller.py
__author__ = "jbc <jbc.develop@gmail.com>"
__version__ = "0.2"
__license__ = "lgpl3"
import subprocess
import shlex
class CallError(Exception):
def __init__(self, cmd, stderr, code):
msg = "External call '%s' fail with code '%i'. Cause: '%s'" % (cmd, code, stderr)
super(CallError, self).__init__(msg)
self.cmd = cmd
self.stderr = stderr
self.code = code
def call(cmd):
"""Execute the cmd an return the standar output or raises an exception
"""
pcmd = shlex.split(cmd)
p = subprocess.Popen(pcmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode:
raise CallError(cmd, stderr, p.returncode)
return stdout
uso:
import caller
print caller.call("ls -lia")

