Snippet: caller.py

Me suelo olvidar como usar el modulo subprocess asi que mantengo aca este snippet

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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
                   

class Call(object):
    """Wraps a system call"""
    
    def __init__(self, cmd):
        """Creates a new instance of call
        
        @param cmd: the system command to be executed
        
        """
        self._cmd = cmd
        self._pcmd = shlex.split(cmd)

    def __repr__(self):
        return "<Call '%s' at %s>" % (self._cmd, hex(id(self)))

    def call(self):
        """Execute the cmd an return the standar output or raises an exception
        
        """
        p = subprocess.Popen(self._pcmd, stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE)
        stdout, stderr = p.communicate()
        if p.returncode:
            raise CallError(self.cmd, stderr, p.returncode)
        return stdout
        
    @property
    def cmd(self):
        return self._cmd

uso:

import caller
ls_lia = caller.Call("ls -lia")
print ls_lia.call()
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: