在Tornado Web服务器中运行Python脚本

在Tornado Web服务器中运行Python脚本,python,raspberry-pi,tornado,Python,Raspberry Pi,Tornado,我的问题对你来说可能很简单,但我才刚刚开始,请帮帮我 我正在运行一个家庭自动化脚本,并尝试将其与Tornado webserver结合 最好的方法是什么 基本Tornado服务器: import tornado.ioloop import tornado.web import os.path class MainHandler(tornado.web.RequestHandler): def get(self): self.render('index.html') a

我的问题对你来说可能很简单,但我才刚刚开始,请帮帮我

我正在运行一个家庭自动化脚本,并尝试将其与Tornado webserver结合

最好的方法是什么

基本Tornado服务器:

import tornado.ioloop
import tornado.web
import os.path

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('index.html')

application = tornado.web.Application([
    (r"/", MainHandler)
application = tornado.web.Application([
    (r"/check", MainHandler)
])

if __name__ == "__main__":
    print 'Starting Server'
    print 'Press ctrl+c to close'
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
还有一个Python脚本:

import RPi.GPIO as GPIO
import time
import os

motion = 14
relay = 2

GPIO.setmode(GPIO.BCM)
GPIO.setup(motion, GPIO.IN, GPIO.PUD_DOWN)
GPIO.setup(relay, GPIO.OUT)
GPIO.output(relay, GPIO.HIGH)

previous = False
current = False

while True:
    time.sleep(1)
    previous = current
    current = GPIO.input(motion)
    if current != previous:
        new = "HIGH"
        GPIO.output(relay, GPIO.LOW)
        print("GPIO pin %s is %s" % (motion, new))
        os.system("sudo omxplayer ring.mp3 &")
        time.sleep(5)
    else:
        GPIO.output(relay, GPIO.HIGH)
        print("No motions")

如果脚本是作为函数编写的,则可以导入并调用它。但是,由于它包含同步代码,您需要使用
ThreadPoolExecutor
从Tornado调用它


或者,最好将其作为子流程启动。请参阅
tornado.process.Subprocess
和标准库的
Subprocess
模块。

您需要在脚本中定义一个函数,您可以
导入
获得该函数,谢谢!如何将其集成到Tornado中?
从我的\u文件导入我的\u func
,然后从Tornado代码调用
我的\u func()
。不过,由于
while True
循环,您可能需要一个单独的线程。如果您用一个示例详细说明您的答案,那将非常棒!