簡體   English   中英

PHP執行python腳本

[英]PHP execute python script

我想通過位於"/var/www/html"的網站(index.php)打開和關閉LED,這兩個腳本位於"/var/www/html/wspace/Server/" 當我使用ssh執行它們時,兩個腳本都可以正常工作,但是我無法通過我的php文件執行它們。

在我的index.php中,我為on- / off.py編寫了以下代碼:

exec("/usr/bin/python3.5 /wspace/Server/on.py");

(我找到了which python3.5所在的python安裝。答案是/usr/bin/python3.5 。)

我不知道怎么了。 是他自己指揮還是我必須改變……。 在阿帕奇? 它必須改變什么才能起作用?

作為進一步的信息,文件的所有者和權限:

index.php pi:pi 777
on.py pi:pi 777
off.py pi:pi 777

apache用戶很可能是“ www-data”,希望沒有sudo訪問權限。 我也不知道exec中的多個單詞可能表現得很奇怪。 exec()甚至可能沒有執行bash,因此“ &&”之類的東西將無法工作。

#!/usr/bin/python3

作為python腳本的第一行,

$chmod +x on.py

然后

exec("/var/www/html/wspace/Server/on.py")

在這里使用相對路徑也不是一個好主意,因為雖然我確定可以指定工作目錄,但您不知道工作目錄是什么。

如果仍然不能解決問題,則可能是環境變量造成的,您將看到類似“未知環境:python3”的內容。 我在這里從內存中引用,所以我可能會離開。 如果是這種情況,則必須調用一個導出PATH的bash腳本。 您可以登錄到該框並以普通用戶的身份回顯$ PATH,這種情況無關緊要,那么bash腳本將是:

#!/bin/bash
export PATH=$PATH:<the stuff from 'echo $PATH'>
/var/www/html/wspace/Server/on.py

也不要忘記為此腳本打開可執行位chmod + x

最后,您的PHP將調用上述bash腳本:

exec("<full path to bash script>")

重要的是要意識到,在所有可能的情況下,傳遞給exec的參數都不會在bash解釋器下運行,因此上述操作可能需要在獨立腳本中完成。

我前一段時間也遇到過同樣的問題。

對於這種情況,您需要考慮腳本與執行文件的相對位置。 目前,您以斜杠開頭,因此它將從根目錄的絕對路徑中查找。 如果刪除它,它將看起來相對並且應該可以工作。

另外,我發現執行python時必須包括整個路徑。 例如

exec('/usr/local/bin/python3 wspace/Server/on.py')

如果仍然無法解決問題,請嘗試更改目錄,然后執行文件:

exec('cd wspace/Server && /usr/local/bin/python3 on.py')

暫無
暫無

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

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