2017-06-05 1 views
1

Ich habe einen Teil eines Python-Skripts. Dieses Skript wird mit einem Shell-Skript aufgerufen.Wie erhalten Sie korrekte Statusmeldungen für ein Python-Skript?

try: 
    sqlContext.sql("create table {}.`{}` as select * from mytempTable".format(hivedb,table)) 
except Exception as e: 
    status = 'fail' 
    error_message = e 
else: 
    status = 'success' 
    error_message = 'No error' 
print ("{},{},{},{}".format(hivedb,table,status,error_message)) 

status == 'success' 
sys.exit(1) 

In diesem obigen Code, wenn ich status == 'success' verwende ich bin immer success für die ganze Zeit, wenn das Skript ausgeführt wird, auch für fehlgeschlagene Aufträge.

Wenn ich sys.exit(1) oder beide zusammen verwende, bekomme ich die ganze Zeit einen Fehler.

Was soll ich tun, die Skriptausführung erfolgreich zu sein zu erhalten, wenn status'success' und fehlschlagen, wenn status'fail' ist?

+2

... 'wenn Status! = 'Erfolg': sys.exit (1)'? Verwenden Sie ** str ** format auch nicht, um SQL-Abfragen zu erstellen, verwenden Sie die von der verwendeten Bibliothek zur Verfügung gestellte Parametrisierung. – jonrsharpe

+0

@jonrsharpe Ihr Kommentar funktioniert für mich. Ich habe einen kleinen Zweifel, im obigen Code möchte ich 'error_message' separat drucken. Ich meine, ich will, dass es auf der Konsole angezeigt wird, aber nicht als Ausgabe des Skripts –

+0

Getrennt was? Was genau ist dein * kleiner Zweifel *? Was hast du versucht, es zu zerstreuen? * "Ich möchte, dass es auf der Konsole angezeigt wird, aber nicht als Ausgabe des Skripts" * - es ist unklar, welche Unterscheidung Sie dort zeichnen. – jonrsharpe

Antwort

0

Die einfachste Antwort wäre, das try/except zu entfernen. Wenn Sie den Aufruf nur ausführen, erhalten Sie für eine Ausnahme das vollständige Traceback zu stderr, und Python wird mit einem Exit-Status ungleich Null beendet.

z.

$ python -c "raise Exception('ha');" 1>stdout 2>stderr 
$ echo $? 
1 
$ cat stderr 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
Exception: ha 
Verwandte Themen