簡體   English   中英

如何從python腳本動態獲取輸出到PHP?

[英]How to get output from python script dynamically to PHP?

我正在將樹莓派與PIR傳感器連接...我編寫了Python腳本來獲取傳感器的輸入...現在我想要PHP中的python腳本的輸出以在我的網站中進行進一步的操作...我嘗試了以下代碼:這是PHP代碼:

<?php    
    $output=shell_exec('python/sense1.py');
    echo $output;
?>

這是Python代碼:

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
PIR_PIN = 26
GPIO.setup(PIR_PIN, GPIO.IN)
while True:
    time.sleep(1)
    if GPIO.input(PIR_PIN):
        print ("Human Moving")
    else:
        print ("No human moving")

我在python中嘗試了單個print語句並在PHP中獲得了輸出...但是現在的問題是Python腳本無限期地每1秒返回輸出...所以我無法從python腳本中獲取輸出(becoz of無限循環)...但是我想每隔一秒鍾輸出一次以檢查PIR傳感器的狀態...我該怎么做? 請幫幫我...

我正在用Raspberry PI的溫度傳感器做類似的事情。 我正在通過調用我使用python flask創建的REST API來有爭議地獲取房間的溫度水平。

這是我在做什么(您只需用傳感器代碼替換溫度傳感器代碼)

我的python燒瓶代碼:

@app.route('/room-temp') //This is my get rest endpoint, i call from php
@requires_auth  //You dont need authentication, so you should remove this
def room_temp():
    pi = pigpio.pi()
    pigpio.exceptions = False
    c, files = pi.file_list("/sys/bus/w1/devices/28-00*/w1_slave")
    pigpio.exceptions = True
    if c >= 0:
       for sensor in files[:-1].split("\n"):
          devid = sensor.split("/")[5] # Fifth field is the device Id.

          h = pi.file_open(sensor, pigpio.FILE_READ)
          c, data = pi.file_read(h, 1000) # 1000 is plenty to read full file.
          pi.file_close(h)

          if "YES" in data:
             #gc.collect()
             (discard, sep, reading) = data.partition(' t=')
             t = float(reading) / 1000.0
             #print("{} {:.1f}".format(devid, t))
             data5 = {'temp':"{} {:.1f}".format(devid, t)}
             pi.stop()
             return jsonify(data5)
          else:
             #print("999.9")
             #gc.collect()
             data6 = {'temp':"999.9"}
             return jsonify(data6)

我在Raspberry中運行了flask api,並從PHP應用程序進行了ajax調用。 我從PHP調用AJAX到http:// raspberryip:port / room-temp

注意:僅需要查看REST,帶有Python Flask的REST( 鏈接 )和PHP的AJAX。

這是從傳感器獲取結果的非常簡單的方法,但是問題在於,將AJAX請求放置到用python flask編寫的REST端點上需要花費幾毫秒的時間。 因此,您需要通過連續運行python腳本來將每個傳感器活動存儲到本地數據庫中,然后才能從該輕量級數據庫中獲取值。 從Raspberry中獲取后,您可以從Raspberry中刪除記錄以忽略開銷。
對於傳感器上的所有活動。
我的建議 :請將傳感器結果存儲到本地數據庫,然后編寫REST端點以從數據庫獲取該記錄。 將您的AJAX調用從您的PHP應用程序放置到該REST端點,以從該Raspberry的本地數據庫獲取數據。

在您的python腳本中,您應該將傳感器值寫在一個文本文件中(而不是顯示它),並用php循環讀取它。

或者只是從您的python腳本中刪除循環。 然后,當您啟動python腳本時,它將僅輸出一個值,並且您將使用php編寫腳本。 問題在於,PHP將只生成一次頁面,而不會重新加載該值。 然后,您可以每秒重新加載頁面以實現該值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM