17

我正在尝试做一些我认为非常简单的事情,但是由于我对 Python 还很陌生,所以我无法弄清楚如何做。调用 URL 时,我需要在我的 Python 脚本中执行一个函数。

例如,我会在浏览器中访问以下 URL(192.168.0.10 是我正在运行脚本的计算机的 IP,8080 是选择的端口)。

http://192.168.0.10:8080/captureImage

当访问此 URL 时,我想在我的 Python 脚本中执行一个操作,在这种情况下执行我创建的一个函数。

我知道这可能相当简单,但我无法找出如何做到这一点。我将不胜感激任何帮助!

4

2 回答 2

19

这在 python 中确实非常简单:

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的文档,或者查看功能更全的 Web 框架,例如 Django。

于 2013-10-18T02:28:42.920 回答
0

完成所需的一种可靠方法是使用 Python Web 框架 Flask ( http://flask.pocoo.org/ )。有一些 Youtube 视频很好地解释了 Flask 基础知识 ( https://www.youtube.com/watch?v=ZVGwqnjOKjk )。

这是我的运动检测器的一个例子,当我的猫在门口等着时,它会发短信给我。触发此代码所需要做的就是针对地址(在我的情况下) http://192.168.1.112:5000/cat_detected的 HTTP 请求

   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 = [['YourPhoneNumber@tmomail.net', '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 = 'yourGmailUserName@gmail.com'
       password = 'yourGmailPassword'
       app.run(host='0.0.0.0', threaded=True)
于 2017-04-23T18:03:23.237 回答