2016-03-19 25 views
2

私の質問は本当に簡単かもしれませんが、私はちょうど始まっていますので、助けてください。TornadoウェブサーバでPythonスクリプトを実行する

私はホームオートメーションスクリプトを実行しており、それを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") 
+0

スクリプトで定義した 'import'できる関数が必要です –

+0

ありがとうございました!そして、私はそれをTornadoにどのように統合できますか? – Alekzz

+0

'import my_func from my_file'を呼び出し、竜巻コードから' my_func() 'を呼び出します。ただし、while whileループのために別のスレッドが必要な場合があります。 –

答えて

1

スクリプトを関数として書かれていた場合、あなたはそれをインポートし、それを呼び出すことができます。ただし、同期コードが含まれているので、を使用してTornadoから呼び出す必要があります。

代わりに、サブプロセスとして起動するほうがよいでしょう。 tornado.process.Subprocessおよび標準ライブラリのsubprocessモジュールを参照してください。

+0

例を使って答えを詳述すると本当に素晴らしいでしょう! –

関連する問題