簡體   English   中英

無法在PHP中輸出Python Print

[英]Can't output Python Print in PHP

我真的堅持這個,但我是一個python(和Raspberry Pi)新手。 我想要的是從我的python腳本輸出print輸出。 問題是(我相信)我的python腳本中的函數需要半秒鍾才能執行,PHP錯過了輸出。

這是我的PHP腳本:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$cmd = escapeshellcmd('/var/www/html/weathertest.py');
$output = shell_exec($cmd);
echo $output;

//$handle = popen('/var/www/html/weathertest.py', 'r');
//$output = fread($handle, 1024);
//var_dump($output);
//pclose($handle);

//$cmd = "python /var/www/html/weathertest.py";
//$var1 = system($cmd);
//echo $var1;

echo 'end';
?>

我已經包含了評論塊,以顯示我嘗試過的其他內容。 所有三個輸出“靜態文本結束”

這是python腳本:

#!/usr/bin/env python

import sys
import Adafruit_DHT
import time

print 'static text '

humidity, temperature = Adafruit_DHT.read(11, 4)

time.sleep(3)

print 'Temp: {0:0.1f}C Humidity: {1:0.1f}%'.format(temperature, humidity)

py在命令行上執行正常。 我添加了3秒的延遲,使腳本感覺更長,我自己的測試。

鑒於我總是將static text作為輸出,我認為我的問題是PHP不等待Adafruit命令。 但對我來說最大的問題是,如果我在命令行執行PHP腳本,即php /var/www/html/test.php那么我的三次PHP嘗試都能正常工作 - 然后我得到了所需的輸出:

static text
Temp: 23.0C Humidity 34.0%
end

所以我想有兩個問題:1。如何使PHP等待Python完成。 2.為什么PHP命令行與瀏覽器不同?

這不是一個答案,但添加了信息,以顯示為什么Pedro Lobito是正確的。

我編輯了我的Python腳本:

#!/usr/bin/env python

import sys
import Adafruit_DHT
import time

print 'static text '

# humidity, temperature = Adafruit_DHT.read(11, 4)

time.sleep(10)

# print 'Temp: {0:0.1f}C Humidity: {1:0.1f}%'.format(temperature, humidity)

print "waited 10 seconds"

您會注意到我只是評論了我的問題區域,將睡眠時間增加到10秒,然后在最后添加了一個新的打印件。 現在在瀏覽器中運行它需要一段時間 - 10秒 - 所以腳本正在等待完成。

我現在的問題是Adafruit_DHT.read所以我會分開調查。

編輯(幾個小時后,心情清醒):我的問題不在於該模塊或功能,我的問題是我安裝的第三方模塊(Adafruit_DHT)的權限。 Pedro對我關於瀏覽器中的php與命令行之間差異的問題的回答是關鍵。 我以為apache是​​以root身份運行的,但是在看了sudo nano /etc/apache2/envvars ,我看到它是www-data。 我把它改成了我,我的腳本在瀏覽器中完美運行。 顯然,以我身份運行的apache並不是很好,但至少我可以證明問題是該特定模塊的權限!

  1. 如何讓PHP等待Python完成

shell_exec將等待命令完成

  1. 為什么PHP命令行與瀏覽器不同?

我最好的猜測是運行命令的用戶的差異。 在命令行上,腳本作為您登錄的同一用戶在“瀏覽器”上運行,可能與apache / nginx的用戶相同,兩種情況下的環境變量都不同。


在腳本之前添加python ,即:

$output = shell_exec("python /var/www/html/weathertest.py");
echo $output;

或者使用python二進制文件的fullpath

$output = shell_exec("/full/path/to/python /var/www/html/weathertest.py");
echo $output;

PS:要知道在shell上使用which pythonfullpath

暫無
暫無

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

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