2013-10-17 7 views
10

का जवाब देता है, मैं ऐसा कुछ करने की कोशिश कर रहा हूं जो मुझे लगता है कि यह बहुत आसान है, लेकिन चूंकि मैं पाइथन के लिए बिल्कुल नया हूं, मैं यह पता लगाने में सक्षम नहीं हूं। जब मुझे एक यूआरएल कहा जाता है तो मुझे अपनी पायथन लिपि में एक फ़ंक्शन निष्पादित करने की आवश्यकता होती है।पाइथन HTTP अनुरोध

उदाहरण के लिए, मैं अपने ब्राउज़र में निम्नलिखित यूआरएल पर जाउंगा (1 9 2.168.0.10 कंप्यूटर का आईपी होने पर मैं स्क्रिप्ट चला रहा हूं, और 8080 पसंद का बंदरगाह है)।

http://192.168.0.10:8080/captureImage 

जब यह देखा गया URL है, मैं एक कार्रवाई एक समारोह मैंने बनाया निष्पादित इस मामले में, मेरे अजगर स्क्रिप्ट में प्रदर्शन करने के लिए करना चाहते हैं।

मुझे पता है कि यह काफी सरल हो सकता है, लेकिन मैं यह नहीं समझ पाया कि यह कैसे किया जा सकता है। किसी भी सहायता के लिए धन्यवाद!

+0

, आप एक वेब सर्वर की आवश्यकता होगी है। क्या आपके पास पहले से ही एक वेब सर्वर स्थापित है और उस कंप्यूटर पर चल रहा है? –

+0

यदि आप विंडोज़ का उपयोग कर रहे हैं तो यह लिंक काम कर सकता है http://stackoverflow.com/questions/3179657/python-webbrowser-question –

+0

मुझे लगता है कि आपने मुझे गलत समझा। मैं पाइथन लिपि को वेब सर्वर के प्रकार के रूप में कार्य करना चाहता हूं, सिवाय इसके कि मुझे किसी भी फाइल की सेवा करने की आवश्यकता नहीं है। जब कोई ग्राहक सर्वर पर किसी URL पर जाता है तो मुझे फ़ंक्शन निष्पादित करने में सक्षम होना चाहिए। – Lazze

उत्तर

7

यह वास्तव में अजगर में करने के लिए बहुत सरल है:

import SocketServer 
from BaseHTTPServer import BaseHTTPRequestHandler 

def some_function(): 
    print "some_function got called" 

class MyHandler(BaseHTTPRequestHandler): 
    def do_GET(self): 
     if self.path == '/captureImage': 
      # Insert your code here 
      some_function() 

     self.send_response(200) 

httpd = SocketServer.TCPServer(("", 8080), MyHandler) 
httpd.serve_forever() 

जहां तुम यहाँ से जाना चाहता हूँ के आधार पर आप BaseHttpServer के लिए दस्तावेज़ चेकआउट, या एक अधिक पूर्ण विशेषताओं वेब रूपरेखा में देखना चाहते हो सकता है Django की तरह।

+0

वही है जो मैं ढूंढ रहा था, धन्यवाद! हालांकि, मैं एक और समस्या में भाग रहा हूं। जब मैं आपके कोड के साथ स्क्रिप्ट शुरू करता हूं, तो वेब सर्वर शेष स्क्रिप्ट को निष्पादित करने से रोकता है। यह एक समस्या है क्योंकि URL को कॉल करते समय मुझे अपनी स्क्रिप्ट से फ़ंक्शन निष्पादित करने की आवश्यकता होती है। मैं इसे ठीक करने के बारे में कैसे जाउंगा? – Lazze

+0

@Lazze - मैंने फ़ंक्शन कॉल को शामिल करने के लिए उदाहरण अपडेट किया है, क्या इससे मदद मिलती है? स्पष्टीकरण के लिए, क्या आप यह समस्या है कि आप वेबसर्वर केवल एक अनुरोध को संभालने के लिए चाहते हैं और फिर बंद कर दें? या यह समस्या है कि httpd.serve_forever() लाइन के बाद कोड है जो कभी नहीं चलता है? (उस स्थिति में, आप सिर्फ अपनी स्क्रिप्ट के अंत में httd.server_forever() लाइन को नीचे ले जा सकते हैं) –

+0

ऐसा कोड है जो service_forever() के बाद कभी नहीं चलता है। जब मैं घर जाऊंगा, तो मैं इसे अपनी स्क्रिप्ट के निचले हिस्से में ले जाने की कोशिश करूंगा, रिपोर्ट करूंगा। अब तक मदद के लिए धन्यवाद! – Lazze

-1

आपको जो कुछ चाहिए उसे पूरा करने का एक मजबूत तरीका एक पाइथन वेब ढांचे, फ्लास्क (http://flask.pocoo.org/) का उपयोग करना है। ऐसे यूट्यूब वीडियो हैं जो फ्लास्क मूल बातें (https://www.youtube.com/watch?v=ZVGwqnjOKjk) को समझाने का अच्छा काम करते हैं।

यहां मेरे गति डिटेक्टर से एक उदाहरण दिया गया है जो मेरी बिल्ली दरवाजे से इंतजार कर रहा है। सभी कि इस कोड को गति प्रदान करने किया जाना चाहिए पते पर एक HTTP अनुरोध के लिए (मेरे मामले में) http://192.168.1.112:5000/cat_detected

from flask import Flask 
    import smtplib 
    import time 


    def email(from_address, to_address, email_subject, email_message): 
     server = smtplib.SMTP('smtp.gmail.com:587') 
     server.ehlo() 
     server.starttls() 
     server.login(username, password) 
     # For character type new-lines, change the header to read: "Content-Type: text/plain". Use the double \r\n. 
     # For HTML style tags for your new-lines, change the header to read: "Content-Type: text/html". Use line-breaks <br>. 
     headers = "\r\n".join(["from: " + from_address, "subject: " + email_subject, 
         "to: " + to_address, 
         "mime-version: 1.0", 
         "content-type: text/plain"]) 
     message = headers + '\r\n' + email_message 
     server.sendmail(from_address, to_address, message) 
     server.quit() 
     return time.strftime('%Y-%m-%d, %H:%M:%S') 


    app = Flask(__name__) 


    @app.route('/cat_detected', methods=['GET']) 
    def cat_detected(): 
     fromaddr = 'CAT ALERT' 
     admin_addrs_list = [['[email protected]', 'Mark']] # Use your carrier's format for sending text messages via email. 
     for y in admin_addrs_list: 
      email(fromaddr, y[0], 'CAT ALERT', 'Carbon life-form standing by the door.') 
     print('Email on its way!', time.strftime('%Y-%m-%d, %H:%M:%S')) 
     return 'Email Sent!' 

    if __name__ == '__main__': 
     username = '[email protected]' 
     password = 'yourGmailPassword' 
     app.run(host='0.0.0.0', threaded=True) 
के साथ शुरू करने
संबंधित मुद्दे