In Version 2.6 veraltet: Das Befehlsmodul wurde in Python 3.0 entfernt. Verwenden Sie stattdessen das Unterprozessmodul.
Versuchen Sie, sich mit Subprocess von Befehlen zu verabschieden.
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
Ergebnis
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
Fazit
Ich glaube nicht, dass ich in die falsche Richtung gehe, aber die Fehlerbehandlung ist seltsam. Lassen Sie es uns bald überprüfen.
Recommended Posts