2016-10-05 7 views
0

Я уже прошел через несколько существующих ссылок StackOverflow для этого запроса, не помог мне.выполнить команду curl в python

Я хотел бы запустить несколько команд curl (4), и каждая команда curl выдаст результат. Из этого вывода я хотел бы проанализировать несколько идентификаторов групп для следующей команды.

curl --basic -u admin:admin -d \'{ "name" : "test-dev" }\' --header \'Content-Type: application/json\' http://localhost:8080/mmc/api/serverGroups 

Я попытался с, как,

#!/usr/bin/python 

import subprocess 
bash_com = 'curl --basic -u admin:admin -d '{ "name" : "test-dev" }' --header 'Content-Type: application/json' http://localhost:8080/mmc/api/serverGroups' 
subprocess.Popen(bash_com) 
output = subprocess.check_output(['bash','-c', bash_com]) # subprocess has check_output method 

Это дает мне ошибку синтаксиса, хотя я изменился с одной цитаты в двойные кавычки для этого завитка команды.

Я пытался с Pycurl, но мне нужно больше в этом разбираться. Есть ли способ, которым мы можем запускать команды curl в python и может анализировать выходные значения и передавать их следующей команде curl.

+0

Какова синтаксическая ошибка? – dunder

+0

Он дает синтаксическую ошибку администратору: admin –

+0

# python -x api.py Файл "api.py ", строка 4 bash_com = curl --basic -u admin: admin -d '{" name ":" test-dev "}' --header 'Content-Type: application/json' http: // localhost: 8080/mmc/api/serverGroups ^ SyntaxError: недопустимый синтаксис –

ответ

1

Вы можете использовать os.popen с

fh = os.popen(bash_com, 'r') 
data = fh.read() 
fh.close() 

Или вы можете использовать подпроцесс как этот

cmds = ['ls', '-l', ] 

try: 
    output = subprocess.check_output(cmds, stderr=subprocess.STDOUT) 
    retcode = 0 
except subprocess.CalledProcessError, e: 
    retcode = e.returncode 
    output = e.output 

print output 

Там вы должны организовать свою команду и Params в списке.

Или вы просто просто и легко используете request.get (...).

И не забывайте: Используя popen, вы можете получить инъекции оболочки через параметры вашей команды!

+0

Отличный ответ! – softvar

0

Лучше выход с помощью os.open (bash_com, 'г'), а затем fh.read()

питон api.py

% Всего% Полученное% Xferd Средняя скорость Время Время Время Ток DLOAD Загрузить Total Spent Left Speed ​​ 199 172 0 172 0 27 3948 619 -: -: - -: -: - -: -: - 4027 {"href": "http://localhost:8080/mmc/api/serverGroups/39a28908-3fae-4903-adb5-06a3b7bb06d8", «serverCount»: 0, «name»: «test-dev», «id»: «39a28908-3fae-4903-adb5-06a3b7bb06d8»}

пытаюсь понять, что fh.read() выполнил команду curl? исправьте меня

0

Я пытаюсь перенаправить команды curl output в текстовый файл, а затем проанализировать файл через JSON. Все, что я пытаюсь получить «id» от вывода.

fh = os.popen(bash_com,'r') 
data = fh.read() 

newf = open("/var/tmp/t1.txt",'w') 
sys.stdout = newf 
print data 

with open("/var/tmp/t1.txt") as json_data: 
    j = json.load(json_data) 
    print j['id'] 

Я проверил содержимое файлов на JSONlint.com и получил на нем VALID JSON. Он бросает «ValueError: объект JSON не может быть декодирован» в строке json.load. Перед выполнением анализа перенаправленного файла необходимо что-то выполнить.