2016-04-11 2 views
0

У меня есть скрипт python, который вызывает скрипт bat, который называется testrunner.bat, который по очереди запускает TestSuite в SOAPUI. Я на самом деле получил внешний вызов работать нормально с помощью следующей команды:Использование Popen в Python для выполнения bat-скрипта с переменной

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") 

Однако, мне нужно, чтобы быть в состоянии иметь программное обеспечение «уровень», чтобы быть динамичными и нужно передать переменный уровень в команду вместо «НОЧНОЙ», поэтому я могу указать, является ли это ночным программным обеспечением или стабильным, и т. д. Я видел, что я должен разбить все аргументы отдельно, но мне тяжело.

ответ

2

subprocess.Popen() может принимать список аргументов, а также строку. Таким образом, это должно работать для вас:

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']) 

Как упомянуто в документации, shlex.split может быть очень полезно для разделения исходной командной строки на куски. Однако, по крайней мере, в моем случае мне пришлось повторно добавить двойные кавычки.

Также напомните, что строки с одной кавычкой могут содержать двойные кавычки и наоборот, поэтому вам не нужно избегать цитат здесь.

+0

Мне пришлось добавить несколько обратных косых черт для пути, но в остальном это потрясающе. Большое спасибо за Вашу помощь! – ssbsts