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

Acerca de JuanBC
About Me. * Ing. en Sistemas. * Entusiasta de los comics. * Linux user. * Java, Bash, Python, C. * RPG Fan. * Escritor.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: