首頁 > 後端開發 > php教程 > 淺談PHP運行Python腳本的方法

淺談PHP運行Python腳本的方法

青灯夜游
發布: 2023-04-09 20:24:02
轉載
4496 人瀏覽過

本篇文章跟大家介紹一下談PHP運行Python腳本的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

淺談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(執行錯誤)

【建議學習:《PHP影片教學」】

這次我就將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腳本的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板