2016-06-20 10 views
0

Ich führe einen Befehl mit Twisted's ProcessProtocol aus.Verdreht. Fehler beim Rückruf von spawnProcess's processExited

ich die Dokumentation Gerüst verwenden und ich habe mehrere Veranstaltungen wie inConnectionLost, connectionMade, etc

Aber wenn der Prozess beendet dieses Ereignis ausgelöst wird:

def processExited(self, reason): 
    print 'processExited, status %d' % (reason.value.exitCode,) 
    if reason.value.exitCode == 0: 
     print 'SUCCESS!!!' 
    else: 
     print 'ERROR!!!' 
     raise RuntimeError, 'some custom error message' 

Wie Sie sehen Ich versuche, Erhebe den Fehler, um ihn in einer höheren Ebene zu fangen. Ich Einwickeln der Befehlsaufruf mit einem wie folgt verschoben:

def success_pipeline(success): 
    log.debug('The pipeline has finished correctly.') 

def failure_pipeline(error, command): 
    log.debug('The pipeline failed...') 

command = CommandProtocol() 
reactor.spawnProcess(command, application_bin, command_arguments, {}) 

d = Deferred() 
d.addCallback(success_pipeline) 
d.addErrback(failure_pipeline, command) 
return d 

Aber, obwohl der Befehl fehlgeschlagen ist (I vertippt manuell die Argumente) ist es immer in den Erfolg Rückruf gehen. Der reason.value.exitCode ist 1, also bestätigt es in bash, dass es fehlgeschlagen ist.

Also, wie kann ich einen Fehler zu fangen benutzerdefinierte Fehler behandeln?

Antwort