execute curl command in python
<p>I have already gone through few StackOverflow existing links for this query, did not help me.</p>

<p>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.</p>

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

<p>I have tried with as ,</p>

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

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

<p>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.</p>

<p>You can use os.popen with</p>

<pre><code>fh = os.popen(bash_com, 'r')
data = fh.read()
fh.close()
</code></pre>

<p>Or you can use subprocess like this</p>

<pre><code>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
</code></pre>

<p>There you have to organize your command and params in a list.</p>

<p>Or you just go the easy way and use requests.get(...).</p>

<p><strong>And do not forget:</strong> Using popen you can get shell injections via parameters of your command! </p>

python curl esb