2012-04-15 10 views
10

मैं किसी वेबपेज कर्ल का उपयोग कर के बारे में जानकारी प्राप्त करना चाहते हैं, लेकिन अजगर में, अब तक मैं इस है:अजगर स्क्रिप्ट से कर्ल के आउटपुट को कैप्चर करने के लिए कैसे

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

तो मुझे लगता है कि चलाने के लिए, इसे बाहर प्रिंट:

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 

मैं आपकी क्या अपेक्षाएं हैं, एक regex (मैं उस के साथ मदद की जरूरत नहीं है) का उपयोग कर उस में 200 से मेल करने में सक्षम हो रहा है, लेकिन, मैं एक तरह से सभी पाठ परिवर्तित करने के लिए नहीं मिल सकता है एक स्ट्रिंग में ऊपर। मैं उसको कैसे करू? मैंने कोशिश की: info = os.system("curl --head www.google.com") लेकिन info बस 0 था।

+0

"उपप्रोसेसर मॉड्यूल नई प्रक्रियाओं को बढ़ाने और उनके परिणामों को पुनर्प्राप्त करने के लिए और अधिक शक्तिशाली सुविधाएं प्रदान करता है; इस मॉड्यूल का उपयोग इस फ़ंक्शन का उपयोग करने के लिए बेहतर है। Replac देखें कुछ सहायक व्यंजनों के लिए सबप्रोसेस दस्तावेज में उपप्रोसेस मॉड्यूल अनुभाग के साथ पुराने कार्यों में आईएनजी। " -http: //docs.python.org/library/os.html#os.system –

उत्तर

2

इस प्रयास करें:

import httplib 
conn = httplib.HTTPConnection("www.python.org") 
conn.request("GET", "/index.html") 
r1 = conn.getresponse() 
print r1.status, r1.reason 
+8

पर जोड़ा गया लिंक यह वास्तव में कर्ल से आउटपुट कैप्चर करने के तरीके पर सवाल का जवाब नहीं देता है। अक्सर आपको विशिष्ट कुकीज़ और अन्य पैरामीटर भेजने के लिए कर्ल की आवश्यकता होती है। – 576i

17

subprocess.Popen() का उपयोग कर इस प्रयास करें,:

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

के रूप में कहा गया है documentation:

उपप्रक्रिया मॉड्यूल, आप नई प्रक्रियाओं अंडे देने के लिए, उनके इनपुट/आउटपुट/त्रुटि पाइप से कनेक्ट की अनुमति देता है और अपने रिटर्न कोड प्राप्त करें।

os.system 
os.spawn* 
os.popen* 
popen2.* 
commands.* 
+0

क्यों? Plz – Billjk

+0

@ user1333973 बताएं: क्योंकि 'subprocess' works और' os.system() 'नहीं है। –

+0

@ user1333973 दस्तावेज –

0

आप इसके बजाय किसी कर्ल आदेश बुलाने की पायथन में एक HTTP पुस्तकालय या http क्लाइंट लाइब्रेरी का उपयोग कर सकते हैं: इस मॉड्यूल जैसे कई अन्य बड़े मॉड्यूल और काम करता है, को बदलने के लिए चाहता है। वास्तव में, एक कर्ल लाइब्रेरी है जिसे आप इंस्टॉल कर सकते हैं (जब तक आपके ओएस पर एक कंपाइलर हो)।

अन्य विकल्प httplib2 (अनुशंसित) हैं जो एक पूर्णतया पूर्ण HTTP प्रोटोकॉल क्लाइंट है जो कैशिंग का समर्थन करता है, या केवल सादा प्रेजेंटप्लिब या अनुरोध नामक लाइब्रेरी है।

तुम सच में, वास्तव में सिर्फ कर्ल आदेश चला और इसके उत्पादन पर कब्जा करना चाहते हैं, तो आप इस popen के साथ निर्मित उपप्रक्रिया मॉड्यूल यहाँ प्रलेखित में कर सकते हैं: http://docs.python.org/library/subprocess.html

0

ठीक है, पढ़ने के लिए एक आसान है, लेकिन इसे करने के लिए गड़बड़ तरीका है। यहां यह है:

import os 
outfile='' #put your file path there 
os.system("curl --head www.google.com>>{x}".format(x=str(outfile)) #Outputs command to log file (and creates it if it doesnt exist). 
readOut=open("{z}".format(z=str(outfile),"r") #Opens file in reading mode. 
for line in readOut: 
    print line #Prints lines in file 
readOut.close() #Closes file 
os.system("del {c}".format(c=str(outfile)) #This is optional, as it just deletes the log file after use. 

यह आपकी आवश्यकताओं के लिए ठीक से काम करना चाहिए। :)

8

किसी कारण से ... मैं कर्ल (कोई pycurl, httplib2 ...) का उपयोग की जरूरत है, हो सकता है यह किसी से मदद कर सकते हैं:

import os 
result = os.popen("curl http://google.es").read() 
print result 
+2

धन्यवाद यह अन्य उत्तरों की तुलना में अधिक सहज है, गंदा/जल्दी से बनाई गई स्क्रिप्ट के लिए आसान :) –

2
import os 
cmd = 'curl https://randomuser.me/api/' 
os.system(cmd) 

परिणाम

{"results":[{"gender":"male","name":{"title":"mr","first":"çetin","last":"nebioğlu"},"location":{"street":"5919 abanoz sk","city":"adana","state":"kayseri","postcode":53537},"email":"çetin.nebioğ[email protected]","login":{"username":"heavyleopard188","password":"forgot","salt":"91TJOXWX","md5":"2b1124732ed2716af7d87ff3b140d178","sha1":"cb13fddef0e2ce14fa08a1731b66f5a603e32abe","sha256":"cbc252db886cc20e13f1fe000af1762be9f05e4f6372c289f993b89f1013a68c"},"dob":"1977-05-10 18:26:56","registered":"2009-09-08 15:57:32","phone":"(518)-816-4122","cell":"(605)-165-1900","id":{"name":"","value":null},"picture":{"large":"https://randomuser.me/api/portraits/men/38.jpg","medium":"https://randomuser.me/api/portraits/med/men/38.jpg","thumbnail":"https://randomuser.me/api/portraits/thumb/men/38.jpg"},"nat":"TR"}],"info":{"seed":"0b38b702ef718e83","results":1,"page":1,"version":"1.1"}} 
संबंधित मुद्दे