溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP如何運行Python腳本

發布時間:2021-03-23 10:03:51 來源:億速云 閱讀:670 作者:小新 欄目:編程語言

這篇文章主要介紹PHP如何運行Python腳本,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

注:本次問題產生的環境是建議在windows環境下,利用IIS+PHP去調用Python腳本失敗的前提下。如果你的環境與本次問題的環境不符。請自動規避。

在產品需求分析到一定階段,各個部門之間需要一定的協調。然后我們做全棧開發的就需要把這些都籠統協調起來。也就出現了后臺同時去調起不同模塊、不同開發語言的需求。

首先后臺使用的是IIS+PHP的環境,且運行在windows上。通過PHP去調用Python的程序。

先說問題:在Python、PHP都加入系統的環境變量(且在cmd的模式下能正常運行)的前提下,通過運行a.php去調起1.py

PHP代碼(a.php)

$result = exec("py 1.py");
var_dump($result);

Python代碼(1.py)

print("123");
fl=open('test3.txt', 'w')
fl.write("5,5,5,1,2,3")
fl.close()

兩個目錄文件在同一目錄下。且IIS可執行權限給足(為了重現問題所在,就寫了最簡單的代碼)然后就出現了運行報錯。

然后我將PHP代碼改進,查看exec函數執行的錯誤狀態碼

$result = exec("py 1.py", $array, $ret);
var_dump($result);
var_dump($array);
var_dump($ret);

發現錯誤碼為103(執行錯誤)

這一次我就將exec函數中的bash改成了標準輸出(為了確定具體錯誤信息)

PS:在bash中0,1,2三個數字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標準輸入(一般是鍵盤),標準輸出(一般是顯示屏,準確的說是用戶終端控制臺),標準錯誤(出錯信息輸出)。

$result = exec("py 1.py 2>error.txt", $array, $ret);
var_dump($result);
var_dump($array);
var_dump($ret);

這一次運行以后,打開error.txt居然出現了:Can't find a default Python.這種錯誤(前提我是將python加入了環境變量且cmd狀態下能直接運行py文件),感覺就遇到了不能言語的錯誤。在充分排查環境變量、可執行權限等錯誤以后。我下意識的將exec里面的執行語句改成了

"python 1.py 2>error.txt"

這一次給我的錯誤居然是【'python' 不是內部或外部命令,也不是可運行的程序或批處理文件?!课疑踔烈欢葢岩蛇@臺電腦有了他自己的想法。就在翻遍所有資料后。我突然想起可能是由于PHP是運行在IIS的服務器上,然而IIS并不是一個所有用戶權限(這一點即是IIS建站目錄權限控制的優點,又是IIS建站的缺點)。結合之前error.txt文件報的錯誤。我就將代碼做一下修改。

$res = exec("你python的安裝絕對路徑/python.exe 1.py 2>error.txt", $array, $ret);
var_dump($result);
var_dump($array);
var_dump($ret);

然后將python這個文件下所有文件的用戶擁有者增加一個IIS用戶控制可執行權限。

這次PHP能找到了Python的可執行exe,成功將我們的代碼執行了。

PS:IIS+Windows 不虧是一個黑洞。

以上是“PHP如何運行Python腳本”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女