Когда я попытался выполнить следующую команду в командной строке, я получил размер хранилища.

curl -G -d "key=val" 'http://172.16.26.2:9005/as/system/storage'
    {
       "userQuotaMax" : 675048,
       "userQuotaUsed" : 439191
    }

Если я попытаюсь запустить свой скрипт на python, то я не смогу получить те же данные.

arg_list = curl -G -d "key=val" 'http://172.16.26.2:9005/as/system/storage'

p = Popen(arg_list, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, executable='/bin/bash')

output = p.stdout.read()

print output

Любая помощь будет очень ценится.

1
pylearner 12 Янв 2017 в 19:53

3 ответа

Лучший ответ

Вместо того, чтобы вызывать curl с помощью popen (), вы могли бы лучше использовать запросы.

http://docs.python-requests.org/en/master/user/quickstart/


так что-то вроде (для GET):

import requests

payload = {"key" :"val"}

response = requests.get("http://172.16.26.2:9005/as/system/storage", data=payload)

print(response.text)


так что-то вроде (для POST):

import requests

payload = {"key" :"val"}

response = requests.post("http://172.16.26.2:9005/as/system/storage", data=payload)

print(response.text)


Должен возвращаться (при условии, что API возвращает html / text, если он возвращает JSON, взгляните на response.json (), объясненный по ссылке выше):

{
   "userQuotaMax" : 675048,
   "userQuotaUsed" : 439191
}

Надеюсь, это поможет вам

2
ngosselin 12 Янв 2017 в 17:19
import pycurl
from StringIO import StringIO


            data_size = StringIO()

            curl_command = pycurl.Curl()

            curl_command.setopt(curl_command.URL, 'http://{}:9005/as/system/storage'.format(ip))

            curl_command.setopt(curl_command.WRITEDATA, data_size)

            curl_command.perform()

            curl_command.close()

            output = data_size.getvalue()

Это также еще одно решение с модулем Pycurl. Но, я думаю, что запросы лучше одного :)

0
pylearner 13 Янв 2017 в 11:53

Мое первое предположение - у вас проблемы с цитированием. Попробуйте это вместо этого:

arg_list = ['/usr/bin/curl', '-G', '-d', 'key=val', 'http://172.16.26.2:9005/as/system/storage']

p = Popen(arg_list, shell=False, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
0
dsh 12 Янв 2017 в 16:58