2015-02-24 4 views
3

Я callign в WebService из моего кода Python:Разбираем выход subprocess.call() из Python

response = subprocess.call(['curl', '-k', '-i', '-H' , 'content-type: application/soap+xml' ,'-d', etree.tostring(tree), '-v' ,'https://world-service-dev.intra.aexp.com:4414/worldservice/CLIC/CaseManagementService/V1']) 

Служба возвращает сообщение мыло, как я анализирую сообщение мыло и узнать, если это был неудачей или успехом?

Я пытался использовать следующее, но я получаю неправильные результаты:

subprocess.check_output("curl -k --data "+etree.tostring(tree)+"@SampleRequest.xml -v https://world-service-dev.intra.aexp.com:4414/worldservice/CLIC/CaseManagementService/V1",stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
+1

Повторите попытку 'check_output', но убедитесь, что первым аргументом является список, как это было для' call'. Предоставление только строки может привести к необычным результатам. – Kevin

+0

Просто используйте http://pycurl.sourceforge.net –

+0

, вам не нужно «завивать», чтобы сделать HTTP-запрос на Python, например, «out = urllib2.urlopen (url, data, headers = {'content-type': . '...'}) следующим образом() '. Есть [мыльные клиенты в Python] (http://stackoverflow.com/q/206154/4279), такие как 'suds', но я бы попробовал вместо этого отправлять/получать только xml (чтобы обойти различные несовместимости между мыльными стеками) - вы можете использовать 'xml.etree.cElementTree' для его анализа. – jfs

ответ

4

Не PIPE просто называют check_output передавая список аргументов и удалить shell=True:

out = subprocess.check_output(["curl", "-k","--data", etree.tostring(tree)+"@SampleRequest.xml", "-v", "https://world-service-dev.intra.aexp.com:4414/worldservice/CLIC/CaseManagementService/V1"]) 

Если вы получаете ненужный код выхода, вы получите CalledProcessError.

+0

спасибо @Padraic, он работает. Как разобрать сообщение о мыле из ответа, полученного от этого вызова? Также, если вызов успешный, есть ли способ, которым я могу разобрать сообщение о мыле, которое я получу от ответа? –

+0

Если вызов не возвращает статус завершения 0, вы получите 'CalledProcessError', если вы хотите сохранить вывод, просто сохраните его в переменной' out = check_output ... ' –

Смежные вопросы