2017-01-12 5 views
1

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

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

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

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 

Любая помощь была бы действительно оценена.

+0

Можете ли вы дать, что вы получаете в 'print output'? – Nilesh

ответ

2

Вместо вызова curl using popen() вам может быть лучше подано с помощью запросов.


так что-то подобное (ГЭТ):

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/текст, если она возвращает JSON, посмотрит на response.json() объяснила, по ссылке выше):

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

Надеется, что это помогает вам

+0

Привет @ngosselin. Спасибо за вашу помощь. Это отлично помогло мне получить данные. – pydev

0

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

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
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. Но, я думаю, что запросы лучше одного :)