2016-05-04 7 views
0

私はフォーラムの束を読んだが、まだ運がありません..私はpythonファイル(liveSensor.py)を実行するPHPファイルを持っています。 pyファイルを一度実行して停止すると、ファイルをバックグラウンドで開いたままにする方法はありますか?コマンドラインでsudo python liveSensor.pyを実行すると、一度だけ実行されますが、sudo python -i liveSensor.pyを置くと開いたままになります。どのようにPHPでこれを行うには?Pythonスクリプトを継続的に実行するにはどうすればよいですか?

PHPファイル - liveSensor.pyファイルで

<?php 
$try = exec('python sensor.py'); 
print_r ($try); 
?> 

Iを検出した後のSQLiteにその情報を渡している2つの振動センサを有していて、その後、私のPHPファイルは、データと、AJAXを使用して、私は表示することができることを取得しますそれ。このすべてが...絶えずPYファイルを起動する以外素晴らしい作品

PYスクリプト -

#!/usr/bin/env python 
import RPi.GPIO as GPIO 
import time 
import sqlite3 

KnockPin = 12 
ShockPin = 13 



inning = 1 
runs = 0 
strikes = 0 
balls = 0 

print ("Welcome to Bases Loaded") 



def setstr(): 
    global strikes 
    strikes = 0 
    global balls 
    balls = 0 




def setup(): 
    GPIO.setmode(GPIO.BOARD)   
    GPIO.setup(KnockPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) 
    GPIO.setup(ShockPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) 




def knock(ev=None): 

with sqlite3.connect('basesLoaded.db') as conn: 

    global strikes 
    global inning 


    strikes += 1 

    if strikes ==0: 

     pass 
    elif strikes == 1: 


     conn.execute("UPDATE bl set STRIKE = 1 WHERE ID =1"); 

     print ("Strike 1 :", conn.total_changes); 

    elif strikes == 2: 


     conn.execute("UPDATE bl set STRIKE = 2 WHERE ID=1"); 

     print ("Strike 2 :", conn.total_changes); 

    elif strikes == 3: 
     global inning 
     inning +=1 
     conn.execute("UPDATE bl set STRIKE = 0 WHERE ID=1"); 
     conn.execute("UPDATE bl set INNING = inning WHERE ID=1"); 

     print ("Strike 3 Your Out :", conn.total_changes); 
     setstr() 
     print ("Inning Number :", inning); 

def shock(ev=None): 
    with sqlite3.connect('basesLoaded.db') as conn: 

     global balls 

     balls += 1 

     if balls ==0: 
      pass 
     elif balls == 1: 

      conn.execute("UPDATE bl set BALL = 1 WHERE ID=1"); 
      conn.commit() 
      print ("Ball 1 :", conn.total_changes); 


     elif balls == 2: 

      conn.execute("UPDATE bl set BALL = 2 WHERE ID=1"); 
      conn.commit() 
      print ("Ball 2 :", conn.total_changes); 

     elif balls == 3: 

      conn.execute("UPDATE bl set BALL = 3 WHERE ID=1"); 
      conn.commit() 
      print ("Ball 3 :", conn.total_changes); 

     elif balls == 4: 

      global runs 
      runs += 1 
      conn.execute("UPDATE bl set BALL = 0 WHERE ID=1"); 
      conn.execute("UPDATE bl set RUN = 'runs' WHERE ID=1"); 
      conn.commit() 
      print ("Run Scored! score is :", runs); 
      setstr() 




def register_callbacks(): 
    GPIO.add_event_detect(ShockPin, GPIO.FALLING, callback=shock, bouncetime=2500) 
    GPIO.add_event_detect(KnockPin, GPIO.FALLING, callback=knock, bouncetime=2500) 



if __name__ == '__main__': 
    try: 
     setup() 
     register_callbacks() 

    except KeyboardInterrupt: 
     destroy() 

これは、ブラウザで私の「ロード拠点へようこそ」というメッセージを返しますが、PYファイルは文句を言わない検出する開いたままセンサ。

+0

liveSensor.pyが実際に何を行っているかについては、(明らかに?)より多くの情報を提供する必要があります。 – Aif

+0

pythonデーモン:http://stackoverflow.com/search?q=python+daemonなぜPHPで起動するのですか? –

+0

私は、ゲームがセットアップされているようにphpで起動すると、投手のマウンドからのスコアボードとして自分のタブレットを使用しています。したがって、私のローカルネットワーク上でapache2 Icanストリームを使用しています。また、私は最終的に、将来私がプログラムする複数のゲームの中から選ぶことができます。私はちょうどphp/htmlでインターフェイスを構築するより快適です –

答えて

0

このような対話のためには、別のプロセスで実行され、データベースなどの通信プロトコルを使用するサーバースクリプトを構築する必要があります。それについて考えると、PHPランタイムはpythonスクリプトを制御することはできません。それはそれを実行して出力を提供することができますが、スクリプトの結果がいつどのように必要なのかをPHPランタイムはどのように把握していますか?

より良いアプローチは、オンデマンドでセンサーデータを提供するPythonでRESTサービスを作成し、Javascriptを使用してAJAX要求を作成し、必要に応じてデータを取得することです。

+0

こんにちは@ Cyb3rFly3r私はsqlite3、apache2、php5とこれを使用するajaxを使用しています、 pyのスクリプトをコマンドラインから起動するか、最初にアイドル状態にしておきます。pyファイルを開いたままにするにはPHPを入手してください。 –