Я прочитал кучу форумов и до сих пор не повезло .. У меня есть php-файл, который выполняет файл python (liveSensor.py). Он запускает файл py один раз и останавливается, как я могу держать файл открытым в фоновом режиме? Если я запускаю sudo python liveSensor.py в командной строке, он запускается только один раз, но если я нахожу sudo python -i liveSensor.py, он остается открытым. Как это сделать в php?Как сохранить постоянный скрипт python?
PHP файл -
<?php
$try = exec('python sensor.py');
print_r ($try);
?>
В файле liveSensor.py У меня есть 2 вибрационные датчики, которые в настоящее время обнаружены и передает эту информацию в SQLite, то мой файл PHP извлекает эти данные и с помощью Ajax можно отобразить Это. Все это прекрасно работает, кроме запуска файла р постоянно ..
р сценарий -
#!/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()
Это возвращает мое «Добро пожаловать в Основы Loaded» сообщение в браузере, но файл ого обыкновения оставаться открытым для обнаружения датчики.
Вы должны (очевидно?) Предоставить больше информации о том, что делает liveSensor.py. – Aif
python daemon: http://stackoverflow.com/search?q=python+daemon и почему вы запустили его с помощью php? –
Я запускаю его с php, поскольку способ настройки игры использует мой планшет в качестве табло с кувшина кувшинов. Таким образом, используя apache2 Ican поток в моей локальной сети. Также я собираюсь в конечном итоге иметь возможность выбирать из нескольких игр, которые я буду программировать в будущем. Мне просто удобнее строить интерфейс в php/html –