2016-06-09 25 views
-5

Ich schrieb ein Skript in Python, um Server zu starten. In einer Schleife überprüfe ich deren Status, um sicherzustellen, dass alle Server aktiv sind, bevor ich weitermache.While-Schleife beendet, bevor alle Bedingungen erfüllt sind

Aber irgendwie die Schleife beendet, bevor alle Bedingungen erfüllt sind.

Irgendwelche Ideen, warum das passiert?

#check if all servers are RUNNING 
while (osb2State!='RUNNING') and (osb3State!='RUNNING') and (osb4State!='RUNNING') and (osb5State!='RUNNING') and (osb6State!='RUNNING') : 

    cd('domainRuntime:/ServerLifeCycleRuntimes/'+sOSB2); 
    osb2State = cmo.getState(); 
    if osb2State == 'ADMIN': 
     resume(sOSB2); 

    cd('domainRuntime:/ServerLifeCycleRuntimes/'+sOSB3); 
    osb3State = cmo.getState(); 
    if osb3State == 'ADMIN': 
     resume(sOSB3); 

    cd('domainRuntime:/ServerLifeCycleRuntimes/'+sOSB4); 
    osb4State = cmo.getState(); 
    if osb4State == 'ADMIN': 
     resume(sOSB4); 

    cd('domainRuntime:/ServerLifeCycleRuntimes/'+sOSB5); 
    osb5State = cmo.getState(); 
    if osb5State == 'ADMIN': 
     resume(sOSB5); 

    cd('domainRuntime:/ServerLifeCycleRuntimes/'+sOSB6); 
    osb6State = cmo.getState(); 
    if osb6State == 'ADMIN': 
     resume(sOSB6);  

    java.lang.Thread.sleep(5000); 
+0

@abadamso bemerkte Ihre Verwendung von java.lang.Thread, die nicht sehr wie Python aussieht. Bist du sicher, dass du das richtig getaggt hast? –

+2

@ScottMermelstein: Sieht für mich wie [Jython] (http://www.jython.org/) aus. – user2357112

+1

während der Test True sein sollte, solange alle Server 'RUNNING' sind, sollte es zwischen jedem Test "oder" geben, da Schleife Schleife sein sollte, selbst wenn ein Server nicht läuft, für eine perfekte Implementierung füge ich eine weitere Variable hinzu - Schleifenzähler, um diese Schleife zu verlassen und Ausnahme aufzurufen, wenn alle Server nicht in einer bestimmten Zeit oder n-Schleife gestartet werden können – Jerzyk

Antwort

3

Erstens ist dies Jython nicht Python.

nehmen Zweite einen Blick auf:

while (osb2State!='RUNNING') and (osb3State!='RUNNING') and (osb4State!='RUNNING') and (osb5State!='RUNNING') and (osb6State!='RUNNING') : 

Die Bedingung ist nur wahr, wenn keine der Zustände == 'RUNNING' sind. Wenn sich also ein Server im laufenden Zustand befindet, wird die Schleife beendet. Wenn Sie möchten, dass alle Server vor dem Beenden aktiv sind, verwenden Sie or nicht and.

+0

Danke für Ihre Antwort. Mein Verständnis von Jython ist, dass es Python mit Java-Bibliotheken ist, daher der Name Jython. Aber danke, dass du meinen Fehler hervorgehoben hast. Sehr geschätzt! –