Snippet: caller.py (0.2)

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")

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>