在子Python的卷曲问题(Curl issue in subprocess Python)

2019-09-30 11:49发布

当我试图运行在命令行下面的命令,我得到的存储容量。

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

如果我尝试在我的python脚本运行,然后,我can'not获得相同的数据。

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

任何帮助将非常感激。

Answer 1:

除了使用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 /文本,如果返回JSON,看看response.json()在上面的链接解释):

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

希望这可以帮助你



Answer 2:

我的第一个猜测是你有问题,使用引号。 试试这个:

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)


Answer 3:

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模块另一种解决方案。 但是,我认为是要求更好的:)



文章来源: Curl issue in subprocess Python