shridhar kapshikar shridhar kapshikar - 2 months ago 29
Python Question

execute curl command in python

I have already gone through few StackOverflow existing links for this query, did not help me.

I would like to run few curl command(4) and each curl commands give output. From that output, I would like to parse the few group ids for next command.

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


I have tried with 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


It gives me the syntax error, though I have changed from a single quote to double quote for that curl command.

I have been trying with Pycurl but i have to look more into that. Is there any way we can run curl commands in python and can parse the output values and pass it to next curl command.

Answer

You can use os.popen with

fh = os.popen(bash_com, 'r')
data = fh.read()
fh.close()

Or you can use subprocess like this

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

There you have to organize your command and params in a list.

Or you just go the easy way and use requests.get(...).

And do not forget: Using popen you can get shell injections via parameters of your command!