2016-03-11 8 views
0

Я начинаю с python. Я пытаюсь выполнить команду curl внутри скрипта Python.Выполнение команды curl внутри Python

Если я делаю это в терминале, это выглядит следующим образом:

curl -k -H "Authorization: Bearer xxxxxxxxxxxxxxxx" -H "hawkular-tenant: test" -X GET https://www.example.com/test | python -m json.tool 

Я пытался сделать исследование, так что я думаю, что я могу использовать urllib2 библиотеку.

Как запустить эту команду?

+0

StackOverflow не является '' cURL' к службе requests' преобразования Python. Однако http://curl.trillworks.com/. –

+0

Есть ли причина, по которой вы используете 'curl', вместо того, чтобы просто отправлять HTTP-запросы из Python? – DaveBensonPhillips

ответ

1

Попробуйте

import subprocess 

bash_com = 'curl -k -H "Authorization: Bearer xxxxxxxxxxxxxxxx" -H "hawkular-tenant: test" -X GET https://www.example.com/test | python -m json.tool' 
subprocess.Popen(bash_com) 
output = subprocess.check_output(['bash','-c', bash_com]) 

Это хороший способ сделать это, потому что это позволяет избежать использования os.system, который может сделать вещи некрасиво. Но старайтесь избегать вызова команд bash изнутри Python, особенно в таком случае, где вы можете просто использовать Requests.

1

Я бы не рекомендовал звонить curl через вашу оболочку изнутри Python. Как насчет httplib?

import httplib 
conn = httplib.HTTPConnection("https://www.example.com/test") 
conn.request("HEAD","Authorization: Bearer xxxxxxxxxxxxxxxx") 
conn.request("HEAD", "hawkular-tenant: test") 
res = conn.getresponse() 

Если вы используете Python3, то вам нужно поменять httplib для http.client

+0

[Файл «C: \ Python27 \ lib \ httplib.py», строка 732, в _set_hostport raise InvalidURL («nonnumeric port:«% s »»% host [i + 1:]) InvalidURL: nonnumeric port: ' //hawkularmetrics.apps.10.2.2.2.xip.io/hawkular/metrics/metrics '] Я получаю эту проблему сейчас. –

0

Вы можете использовать подпроцесс с Popen и общаться для выполнения команд и получения выходных данных.

def executeCommand(cmd, debug = False): 
    ''' 
    Excecute a command and return the stdiout and errors. 
    cmd: list of the command. e.g.: ['ls', '-la'] 
    ''' 
    try: 
     cmd_data = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
     output,error = cmd_data.communicate() 
     if debug: 
     if (len(error)>1): 
      print 'Error:', error 
     if (len(output)>1): 
      print 'Output:', output 
     return output, error 
    except: 
     return 'Error in command:', cmd 

Затем вы кладете команду, как

executeCommand(['curl', '-k', '-H', '"Authorization: Bearer xxxxxxxxxxxxxxxx"', '-H', '"hawkular-tenant: test"', '-X', 'GET', 'https://www.example.com/test', '|', 'python', '-m', 'json.tool']) 
0

Вы можете использовать pycurl библиотеку.

pip install pycurl 

Инструкции и примеры here

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