亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Apache 服務器使用 PHP 執行 Python 腳本

使用 Apache 服務器使用 PHP 執行 Python 腳本

PHP
皈依舞 2022-07-29 10:23:12
我遇到了一個奇怪的問題。我有一個從 PHP 腳本調用的 Python 腳本。這一切都在 Ubuntu 18.04 上的 Apache 服務器上運行。部分 Python 腳本使用 Google Drive API。編輯:見底部經過大量測試和復制后,我得出結論,只需導入以下 Google Drive Python 庫和依賴項:from __future__ import print_functionfrom googleapiclient import discoveryfrom httplib2 import Httpfrom oauth2client import file, client, toolsfrom googleapiclient.http import MediaIoBaseDownload從 Web 調用腳本時會弄亂腳本。我的意思是 Python 腳本似乎沒有執行,并且我應該通過 print 語句獲得的任何 shell 輸出都不會返回到 PHP 腳本。在本地調用腳本(python myscript.py)時,它工作得很好。奇怪的是,當我從 Python 腳本中刪除這些導入語句時,它在 PHP 和從瀏覽器直接啟動腳本時都可以正常執行。在這兩種情況下,我還能夠將 shell 輸出返回到 PHP 腳本。我已經為 Python 腳本提供了適當的權限,并且我已經將 Apache 配置為能夠運行 CGI 腳本。這是我的 Python 腳本的樣子:#!/usr/bin/env python3import cgitbfrom __future__ import print_functionfrom googleapiclient import discoveryfrom httplib2 import Httpfrom oauth2client import file, client, toolsfrom googleapiclient.http import MediaIoBaseDownloadcgitb.enable()print("Hello World")這是我的 PHP 腳本的樣子:<?php    ini_set('display_errors', 1);    ini_set('display_startup_errors', 1);    error_reporting(E_ALL);    $output = shell_exec("python path_to_my_script/myscript.py");    echo $output;?>編輯:我使用通過 pip 安裝的另一個 3rd 方 Python 庫運行了幾個測試,這實際上似乎是通過 PHP 執行腳本時導入任何 3rd 方庫的問題。
查看完整描述

2 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

您的問題是用戶權限問題。您應該以擁有您的 python 環境的用戶身份運行 Apache 服務器,或者允許運行服務器的用戶在您的 python 環境中執行權限。

這個答案應該可以幫助您找出服務器的最佳設置。

另請閱讀有關Apache VirtualHosts 配置的信息


查看完整回答
反對 回復 2022-07-29
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

我想通了。希望這將幫助任何有類似問題的人。當您從 Apache 服務器上提供的 PHP 腳本執行 Python 或 shell 腳本時,該腳本將以用戶身份運行,默認情況下為 www-data。

通過運行命令 sudo -u www-data(以 www-data 用戶運行以下命令)python myscript.py,我得到一個回溯錯誤,提示找不到 3rd 方模塊。發生的情況是,默認情況下 pip(python 包管理器)在用戶級別安裝其包。這對大多數應用程序來說都很好,但在這種情況下會導致問題,因為 www-data 用戶可以理解地找不到已安裝的包,并且腳本崩潰了。從 PHP 腳本的角度來看,這變得特別棘手,因為它不理解這一點并且輸出只是 null。

我知道不推薦使用 sudo 安裝 pip 包,因為它在某些情況下會導致沖突問題;但是,這是解決大多數軟件包問題的最簡單方法。對于這不起作用的情況,請查看 infinigrove 的答案: 如何安裝 Python 包以供所有用戶全局使用(包括 www-data)

最后,從我所見,為了以 www-data 用戶身份安裝 pip 包(sudo -u www-data pip install package),必須授予 www-data sudo 權限,這絕對不是推薦的解決方案.


查看完整回答
反對 回復 2022-07-29
  • 2 回答
  • 0 關注
  • 208 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號