在Tornado Web服务器中运行Python脚本
我的问题对你来说可能很简单,但我才刚刚开始,请帮帮我 我正在运行一个家庭自动化脚本,并尝试将其与Tornado webserver结合 最好的方法是什么 基本Tornado服务器:在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
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
循环,您可能需要一个单独的线程。如果您用一个示例详细说明您的答案,那将非常棒!