![](/img/trans.png)
[英]How to pass php functional parameters from python script and get output?
[英]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.