2013-12-03 4 views
0

Просто возникла проблема на моем проекте Raspberry Piпрекратить питона в то время как цикл в PHP

У меня есть веб-сервер, работающий на Raspberry Pi и я пишу веб-интерфейс с некоторыми кнопками для управления Pi. Сначала Pi запускает скрипт python в цикле «while True». Это означает автоматический режим.

Вот вопрос. Когда я нажимаю кнопку на веб-странице, я хочу перейти в ручной режим. Это означает, что я хочу закончить цикл while while и запустить некоторые другие скрипты python. Как я могу достичь этого на моей веб-странице? Также, учитывая, что я могу переключиться обратно в автоматический режим.

window.prettyPrint && prettyPrint(); 
    $('#power-switch').on('switch-change', function (e, data) { 
     if(data.value == true){ 
      var $el = $(data.el) 
      , value = data.value; 
      //console.log('on',e, $el, value);//for debug 

      /* 
      add your function here 
      */ 
      js_pw_ON(); 


      $('#auto-switch').bootstrapSwitch('setActive', true); 
      $('#lgt1').prop('disabled', false); 
      $('#lgt2').prop('disabled', false); 
      $('#lgt3').prop('disabled', false); 
      $('#lgt4').prop('disabled', false); 
      $('#lgt5').prop('disabled', false); 
     } 
+0

Вам нужно будет использовать своего рода [IPC] (http://en.wikipedia.org/wiki/Inter-process_communication). –

+0

@JonathonReinhart Вы можете это объяснить подробно? На самом деле мне не нужно передавать информацию между python и веб-страницей. Все, что мне нужно - это запустить разные скрипты на разных кнопках. – ozhe

+0

Вам все еще нужен какой-то IPC, чтобы остановить процесс. Это на Linux? Вы можете отправить ему [сигнал] (http://docs.python.org/2/library/signal.html) –

ответ

0

Самый простой способ достижения вашей цели - использовать файл, называемый let say «manual_mode» с 0 или 1 внутри. Конечно, и php, и python должны иметь права на файл.

Php очень хорошо разбирается в файлах. Ну, если вы хотите ручной режим на:

file_put_contents('manual_mode','1'); 

Off:

Python сделок довольно хорошо с файлами Aswell:

while 1: 
    f = open('manual_mode','r') 
    val = f.read() 
    f.close() 
    if val == '1': 
     break 

EDIT: В случае, если вы используете JQuery, вы должен сначала сделать файл switch.php:

<?php 
if(!empty($_GET['sw']) && $_GET['sw'] == 1) 
{ 
    file_put_contents('manual_mode','1'); 
} else 
{ 
    file_put_contents('manual_mode','0'); 
} 

Когда вы назовете это как switch.php? Sw = 1 manual_mode будет установлен в 1 (до 0 в противном случае). Что ты собираешься делать дальше, чтобы выполнить вызов PHP скрипт из кода JQuery:

$.get("switch.php?sw=1"); 

Я думаю, что это все, что вам нужно.

КПП. Согласно комментариям, IPC зависит от платформы, а файлов нет, поэтому выбор очевиден.

+0

Спасибо за ответ! Я использую переключатель Bootstrap для переключения между автоматическим и ручным режимами. Как я могу поместить «file_put_contents» на эти кнопки переключателя? Я добавил код переключателя в исходный вопрос – ozhe

+0

@ozhe - Я сделал некоторые изменения. Проверь это. – Scony

+0

Спасибо! @Scony Ваше решение работает очень хорошо. – ozhe

Смежные вопросы