在python中执行curl命令

时间:2016-10-05 11:07:05

标签: python curl esb

我已经通过了几个StackOverflow现有链接来查询此查询,但没有帮助我。

我想运行几个curl命令(4),每个curl命令都会输出。从那个输出中,我想解析几个组ID以获得下一个命令。

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

我尝试过as,

#!/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

它给了我语法错误,尽管我已从单引号更改为该curl命令的双引号。

我一直在尝试使用Pycurl,但我必须更多地考虑这一点。有没有办法在python中运行curl命令,可以解析输出值并将其传递给下一个curl命令。

3 个答案:

答案 0 :(得分: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

你必须在列表中组织你的命令和参数。

或者你只是简单地使用requests.get(...)。

不要忘记:使用popen,您可以通过命令参数进行shell注入!

答案 1 :(得分:0)

使用os.open(bash_com,'r')然后使用fh.read()

更好地输出

python api.py

%收到的总百分比%Xferd平均速度时间时间当前时间                                  Dload上载总左转速度 199 172 0 172 0 27 3948 619 - : - : - - : - : - - : - : - 4027 的 { “HREF”: “http://localhost:8080/mmc/api/serverGroups/39a28908-3fae-4903-adb5-06a3b7bb06d8”, “serverCount”:0, “姓名”: “测试-dev的”, “ID”: “39a28908-3fae-4903-adb5-06a3b7bb06d8”}

尝试了解fh.read()是否已执行curl命令?请纠正我

答案 2 :(得分:0)

我正在尝试将curl命令输出重定向到文本文件,然后通过JSON解析文件。我试图从输出中得到“id”。

.andExpect(request().asyncResult("Expected output"))

我已经检查了JSONlint.com中的文件内容并获得了VALID JSON。在json.load行抛出“ValueError:No JSON对象无法解码”。在解析重定向文件之前是否需要执行任何操作。