Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How To Capture Output of Curl from Python script

Tags:

python

I want to find the info about a webpage using curl, but in Python, so far I have this:

os.system("curl --head www.google.com")

If I run that, it prints out:

HTTP/1.1 200 OK
Date: Sun, 15 Apr 2012 00:50:13 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=3e39ad65c9fa03f3:FF=0:TM=1334451013:LM=1334451013:S=IyFnmKZh0Ck4xfJ4; expires=Tue, 15-Apr-2014 00:50:13 GMT; path=/; domain=.google.com
Set-Cookie: NID=58=Giz8e5-6p4cDNmx9j9QLwCbqhRksc907LDDO6WYeeV-hRbugTLTLvyjswf6Vk1xd6FPAGi8VOPaJVXm14TBm-0Seu1_331zS6gPHfFp4u4rRkXtSR9Un0hg-smEqByZO; expires=Mon, 15-Oct-2012 00:50:13 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

What I want to do, is be able to match the 200 in it using a regex (i don't need help with that), but, I can't find a way to convert all the text above into a string. How do I do that? I tried: info = os.system("curl --head www.google.com") but info was just 0.

like image 322
Billjk Avatar asked Apr 15 '12 00:04

Billjk


2 Answers

For some reason... I need use curl (no pycurl, httplib2...), maybe this can help to somebody:

import os
result = os.popen("curl http://google.es").read()
print result
like image 200
Raúl Martín Avatar answered Sep 30 '22 03:09

Raúl Martín


Try this, using subprocess.Popen():

import subprocess
proc = subprocess.Popen(["curl", "--head", "www.google.com"], stdout=subprocess.PIPE)
(out, err) = proc.communicate()
print out

As stated in the documentation:

The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several other, older modules and functions, such as:

os.system
os.spawn*
os.popen*
popen2.*
commands.*
like image 37
Óscar López Avatar answered Sep 30 '22 04:09

Óscar López