classe de wrapper de sous-processus python

Obsolète dans la version 2.6: le module de commandes a été supprimé dans Python 3.0. Utilisez plutôt le module de sous-processus.

Essayez d'utiliser Subprocess pour dire adieu aux commandes.

shell.py


#!/usr/bin/python

import sys
import shlex
from   subprocess import Popen, PIPE, STDOUT

__version__ = '0.0.1'

#----------------------------------------------------------
# SHELL CLASS
#----------------------------------------------------------
class Shell(object):

    def __init__(self):

        self.p  = None

    def cmd(self, cmd):

        p_args = {'stdin'     : None,
                  'stdout'    : PIPE,
                  'stderr'    : STDOUT,
                  'shell'     : False,}

        return self._execute(cmd, p_args)

    def pipe(self, cmd):

        p_args = {'stdin'     : self.p.stdout,
                  'stdout'    : PIPE,
                  'stderr'    : STDOUT,
                  'shell'     : False,}

        return self._execute(cmd, p_args)

    def _execute(self, cmd, p_args):

        try :
            self.p = Popen(shlex.split(cmd), **p_args)
            return self

        except :
            print 'Command Not Found: %s' % (cmd)
            sys.exit()

    def commit(self):

        result = self.p.communicate()[0]
        status = self.p.returncode

        return (status, result)

#----------------------------------------------------------
# TEST
#----------------------------------------------------------
def test():
    '''
    tac ./test.txt | sort | uniq -c

    '''
    shell= Shell()

    #--- CASE 1
    (return_code, stdout) = shell.cmd('tac ./test.txt').pipe('sort').pipe('uniq').commit()
    print 'RETURN_CODE: %s  \nSTDOUT: \n%s' % (return_code, stdout)

    #--- CASE 2
    s = shell.cmd('tac ./test.txt')
    s.pipe('sort')
    s.pipe('uniq')
    (return_code, stdout) = s.commit()
    print 'RETURN_CODE: %s, \nSTDOUT: \n%s' % (return_code, stdout)

if __name__ == '__main__':test()

test.txt


1
2
3
4
5
6
7
8
9
0

résultat

RETURN_CODE: 0
STDOUT:
0
1
2
3
4
5
6
7
8
9

RETURN_CODE: 0,
STDOUT:
0
1
2
3
4
5
6
7
8
9

Conclusion

Je ne pense pas que je suis dans la mauvaise direction, mais la gestion des erreurs est étrange. Revoyons-le bientôt.

Recommended Posts

classe de wrapper de sous-processus python
classe wrapper python syslog
Classe wrapper YOLO Python
[Python] classe, instance
"Kanrika" la classe python
À propos de python, classe
classe python, instance
Les bases de #Python (classe)
Classe Python (mémo d'apprentissage Python ⑦)
classe de cas en python
[Python] Héritage de classe (super)
Tri par classe Python
[python] méthode de base de la classe
Wrapper de type Method_missing en Python
[Python] Héritage de classe, remplacement
Notation de classe en Python
Liste des classes d'exception Python
Python: variables de classe et d'instance
Résumé de la portée des membres de la classe Python
Variables de classe et d'instance Python
Wrapper exécutant Hadoop en Python
objet perl et classe python partie 2.
Python
[Hikari-Python] Chapitre 09-03 Classe (Héritage)
Les mines terrestres cachées dans les variables de classe Python
Définitions de classe Python et gestion des instances
"La classe d'introduction Python la plus simple" modifiée
classe
[Python] Road to the Serpent (3) Classe Python
Examiner la classe d'un objet avec python
objet perl et classe python partie 1.
Exécution parallèle facile avec le sous-processus python
classe
[Python] Hériter d'une classe avec des variables de classe
Générer une collection de première classe en Python
Créer un décorateur de fonction Python avec Class
[Introduction à Python] Comment utiliser la classe en Python?
Implémenter __eq__ etc. de manière générique dans la classe Python
[Mémo d'apprentissage] Bases de la classe par python
[Python] Comment rendre une classe itérable
[Python] Différence entre la méthode de classe et la méthode statique
Comment utiliser __slots__ dans la classe Python
Générer une classe à partir d'une chaîne en Python
[Python2.7] Résumé de l'utilisation du sous-processus
Implémentation du wrapper Python pour l'API Qiita v2
Parler des attributs de classe Python et des métaclasses