2016-04-11 5 views
0

Ich habe ein Python-Skript, das ein Bat-Skript namens testrunner.bat ruft, die wiederum eine TestSuite in SOAPUI ausführt. Ich habe tatsächlich den externen Anruf bekommen ganz gut mit dem folgenden Befehl zu arbeiten:Verwenden von Popen in Python zum Ausführen von Bat-Skript mit Variable

Popen("testrunner.bat -s\"CCT000 - Deploy Software Release\" -R\"TestSuite Report\" -E\"Default environment\" -Ppath.packages.sq=Y:\\NIGHTLY C:\\CI\\HEDeployment\\CI-XXX-DeploySwRelease") 

Ich brauche aber die Software „Ebene“, um in der Lage sein, dynamisch zu sein und den variablen Pegel in den Befehl übergeben müssen anstelle von "NACHT", also kann ich angeben, ob es nächtliche Software oder stabil usw. ist. Ich habe gesehen, dass ich alle Argumente getrennt brechen sollte, aber ich habe es schwer.

Antwort

2

subprocess.Popen() kann eine Liste von Argumenten sowie eine Zeichenfolge aufnehmen. So, das sollte für Sie arbeiten:

release_type = "NIGHTLY" 
Popen(['testrunner.bat', 
     '-s"CCT000 - Deploy Software Release"', 
     '-R"TestSuite Report"', 
     '-E"Default environment"', 
     '-Ppath.packages.sq=Y:' + release_type, 
     'C:CIHEDeploymentCI-XXX-DeploySwRelease']) 

Wie in der Dokumentation erwähnt, kann shlex.split sehr nützlich sein für Ihre ursprüngliche Befehlsfolge in Stücke aufzuteilen. In meinem Fall musste ich die Anführungszeichen jedoch erneut hinzufügen.

Beachten Sie auch, dass Strings in einfachen Anführungszeichen doppelte Anführungszeichen enthalten können und umgekehrt, sodass Sie die Anführungszeichen hier nicht ignorieren müssen.

+0

Ich musste ein paar Backslashes für den Pfad hinzufügen, aber ansonsten ist das großartig. Vielen Dank für deine Hilfe! – ssbsts