2016-06-27 6 views
0

Schrieb ein Python-Skript, das eine Aufgabe ausführt, die möglicherweise für ein paar Stunden ausgeführt wird. Da es mit einem Remote-Server kommuniziert, kann das Skript fehlschlagen, wenn ein Verbindungsfehler auftritt. Was ich tun möchte, ist, es wieder zu starten, wenn sein Exit-Code nicht 0 ist. Ist es mit Bash möglich?bash - Wie startet man ein Programm, bis es mit 0 endet 0

Einige Pseudo-C, wenn meine Formulierung nicht klar ist:

int exitcode; 
do 
{ 
    exitcode = MyPythonScript(); 
} while (exitcode != 0); 
+0

Anstatt das Programm von Bash neu zu starten, sollten Sie den Verbindungsfehler im Python-Programm abfangen und in diesem Fall erneut verbinden. – hek2mgl

+0

@ hek2mgl, stimme ich absolut zu, dass dies eine viel bessere Lösung wäre. Allerdings ist der Code, der das Netzwerk-Zeug macht, nicht meins, ich rufe lediglich eine Funktion von einer Lib auf. Das macht mich unsicher, ob ich irgendetwas über den Verbindungsfehler tun kann, ohne die lib selbst zu modifizieren. –

Antwort

2
until MyPythonScript 
do 
    : Nothing 
done 

Das beendet, wenn der Befehl endet mit einem echten (Erfolg) Status. Sie können anstelle des Befehls "Nichts tun, aber immer erfolgreich sein" : einen Ruhezustand oder einen Fehlerbericht oder einen anderen gewünschten Eintrag in den Schleifenkörper einfügen. Natürlich können Sie dem Skript natürlich auch Argumente hinzufügen (und E/A-Umleitungen usw.).

+0

Super elegante Lösung! – hek2mgl

+2

Anstelle des ': Nothing' (das ist wirklich nur ein': 'mit einem verworfenen Argument), können Sie auch schlafen (wie' sleep 10' um 10 Sekunden schlafen zu lassen), was häufig eine gute Idee ist, um Netzwerk-Spamming zu vermeiden und verschwendete Prozessorzyklen. – Taywee

+0

Super, danke! –

Verwandte Themen