如何在 WordPress 中運行 Python 腳本

已發表: 2023-08-03

Python 由於其易用性、強大的庫和簡單的語法而持續流行。 我經常發現自己使用 Python 為 WordPress 製作各個功能的原型,然後再將其轉換為 PHP。

但與其這樣做,為什麼不在 WordPress 上運行 Python 呢? 在這篇文章中,我們將討論可用於直接在 WordPress 網站上運行 Python 代碼的各種方法。

在 WordPress 上運行 Python 腳本

我們可以使用名為exec()的內置 PHP 函數來運行外部腳本,包括來自 Python 的腳本。 這需要 PHP 和 Python 中的一些代碼才能工作,但一旦您了解了所有內容如何組合在一起,這就很容易了。

大衛-克洛德-ojlt2xbwuws-unsplash-1

我們可以創建一個插件或代碼片段。 這取決於您想要構建的內容,但我通常會創建一個更容易在網站前端管理的代碼片段。

首先,確保 Python 已全局安裝在您的服務器上。 如果您有 root 訪問權限,您可以自己安裝,如果沒有,則需要要求您的網絡主機安裝它。 例如,在 Cloudways 上,我們需要讓他們為我們安裝 Python。

PHP函數

我們將創建代碼來創建一個 PHP 函數,該函數將在 WordPress 中運行任何 Python 腳本。 為了便於使用,我將首先向您展示一個可以與代碼片段管理插件一起使用的片段。 然後我們可以看看構建一個自定義插件來完成同樣的事情。

通過此功能,所有Python腳本都位於媒體庫中,我們可以通過指定媒體庫項目ID來選擇要運行的腳本。 請記住,您可能需要允許上傳 Python mime 類型。 我使用這個插件來啟用它。

這看起來有點複雜,因為我最終添加了很多錯誤處理。 但其核心是,所有代碼所做的就是從媒體庫中查找文件,然後運行腳本,輸出最終返回的任何內容。

請注意,我使用了“python3”,因為這是我的計算機上安裝的。 您可能想將其更改為“python”。

<?php function cwpai_run_python_script($media_id) { // 獲取服務器上的媒體文件路徑 $media_path = get_attached_file($media_id); // 檢查媒體文件是否存在 if ($media_path) { // 設置 Python 命令 $python_command = 'python3 ' . escapeshellarg($media_path); // 運行Python腳本並捕獲輸出 exec($python_command, $output, $return_status); if ($return_status === 0) { // 腳本執行成功,返回輸出 return implode("\n", $output); } else { // 腳本執行失敗,記錄錯誤並返回錯誤信息 error_log('Error waiting Python script. Command: ' . $python_command); return '執行 Python 腳本時出錯。'; } } else { // 未找到媒體文件,記錄錯誤並返回錯誤消息 error_log('Media file not found for media ID ' . $media_id); return '未找到媒體文件。'; } } // 媒體 ID 6 的使用示例 $result = cwpai_run_python_script(6); // 輸出結果或處理錯誤 if (is_string($result)) { // 如果結果是字符串,則表示錯誤信息 echo $result; } else { // 如果結果不是字符串,則應該是 Python 腳本的輸出 // 顯示輸出或根據需要執行進一步處理 echo $result; }

如果我們創建一個插件,結構可能如下所示:

 wp-content/plugins/ cwpai_my-python-plugin/ cwpai_plugin.php assets/ py/ script.py

cwpai_plugin.php 看起來像這樣:

<?php /* 插件名稱:CWPAI My Python 插件 描述:用於執行媒體文件的 Python 腳本的插件。 版本:1.0 作者:你的名字 */ // 插件代碼將放在這裡。 function cwpai_run_python_script($file_name) { // 獲取插件目錄路徑 $plugin_dir = plugin_dir_path(__FILE__); // 設置相對於插件目錄的 Python 腳本路徑 $python_script_path = $plugin_dir . '資產/py/' 。 $文件名; // 檢查Python腳本文件是否存在 if (file_exists($python_script_path)) { // 設置Python命令 $python_command = 'python3 ' . escapeshellarg($python_script_path); // 運行 Python 腳本並捕獲輸出 exec($python_command, $output, $return_status); if ($return_status === 0) { // 腳本執行成功,返回輸出 return implode("\n", $output); } else { // 腳本執行失敗,記錄錯誤並返回錯誤信息 error_log('Error waiting Python script. Command: ' . $python_command); return '執行 Python 腳本時出錯。'; } } else { // 未找到 Python 腳本文件,記錄錯誤並返回錯誤消息 error_log('Python 腳本文件未找到: ' . $python_script_path); return 'Python 腳本文件未找到。'; } }

對於插件,將 Python 腳本包含在特定目錄(在本示例中為 asset/py)中會更快,從而允許您通過 FTP 添加和編輯它們。 因此,如果您有大量 Python 可以在 WordPress 中運行,那就更好了。

要使用它,只需調用該函數:

// 文件名“example.py”的使用示例 $result = cwpai_run_python_script('example.py'); // 輸出結果或處理錯誤 if (is_string($result)) { // 如果結果是字符串,則表示錯誤信息 echo $result; } else { // 如果結果不是字符串,則應該是 Python 腳本的輸出 // 顯示輸出或根據需要執行進一步處理 echo $result; }

短代碼

在“生產”中,製作 WP 短代碼來運行 Python 腳本也可能會有所幫助。 我們可以使用上面相同的通用函數,修改為使其成為 WordPress 短代碼:

function cwpai_run_python_script($atts) { // 提取簡碼屬性 $args = Shortcode_atts(array('media_id' => '1'), $atts); // 獲取服務器上的媒體文件路徑 $media_path = get_attached_file($args['media_id']); // 檢查媒體文件是否存在 if ($media_path) { // 設置 Python 命令 $python_command = 'python3 ' . escapeshellarg($media_path); // 運行 Python 腳本並捕獲輸出 exec($python_command, $output, $return_status); if ($return_status === 0) { // 腳本執行成功,返回輸出 return implode("\n", $output); } else { // 腳本執行失敗,記錄錯誤並返回錯誤信息 error_log('Error waiting Python script. Command: ' . $python_command); return '執行 Python 腳本時出錯。'; } } else { // 未找到媒體文件,記錄錯誤並返回錯誤消息 error_log('Media file not found for media ID ' . $args['media_id']); return '未找到媒體文件。'; add_shortcode('run_python_script', 'cwpai_run_python_script');

現在您可以直接在帖子和頁面中使用短代碼[run_python_script media_] 。 將“6”替換為您要使用的媒體文件的 ID。

使用託管服務

有數十種託管服務允許您通過 API 訪問 Python。 這對於更複雜的項目和工作流程可能會有所幫助,特別是當您可以訪問 PHP 中的輸出(使用 CURL)時,就像創建自己的自定義插件一樣。

首先,您需要使用 Python 創建一個 API。 這是一個很好的資源。 您本質上將使用 Flask 來創建一個公開 API 端點的 Web 應用程序。 然後,您將使用這些服務之一託管該 Web 應用程序,並使用 PHP 訪問不同的 API 端點。

下面是一個具有 API 的 Python 應用程序示例:

# api.py import random from Flask import Flask, request, jsonify app = Flask(__name__) things_list = [ "Apple", "Banana", "Carrot", "Dog", "Elephant", "Flower", "Guitar" , "House", "Igloo", "Jacket" ] @app.route('/api/data',methods=['POST']) def process_data(): data = request.get_json() message = data.get ('message') random_thing = random.choice(things_list) response_data = {'response': f'收到消息:{message}。 隨機事物:{random_thing}'} return jsonify(response_data) if __name__ == '__main__': app.run(debug=True)

以及我如何在 PHP 中訪問它,從而允許我在 WordPress 中使用該數據(無論是更改數據庫字段、添加新用戶等......)

<?php // API 端點 URL $apiUrl = 'http://your-python-api-domain.com/api/data'; // 發送到 Python API 的數據 $data = array( 'message' => 'Hello from PHP!' ); // 將數據轉換為 JSON $dataJson = json_encode($data); // 初始化 cURL 會話 $ch = curl_init(); // 設置 cURL 選項curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson); curl_setopt($ch, CURLOPT_HTTPHEADER, array('內容類型:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 執行 cURL 會話並捕獲響應 $response = curl_exec($ch);

現在,有了 $response 數據,您可以將其與任何 WordPress 功能一起使用。 這是一個基本示例,但很好地展示瞭如何執行此操作。

如果您對技術有一定了解並且想要便宜的東西,我建議您使用 Digital Ocean 部署您的 Python 應用程序,對於簡單的事情,其成本為 2.50 美元/月。

如果您想要快速、簡單且容易的東西,請訪問 PythonAnywhere.com,起價為 5 美元/月。

除了小場景之外,這種方法可能是最好的做事方式。

將 Python 轉換為 PHP

另一種選擇是簡單地將 Python 轉換為 PHP 並使用代碼片段等插件來運行該函數。

您可以手動將其轉換為PHP,或者使用ChatGPT或CodeWP等工具粘貼Python,並請求將其重寫為PHP。 以下是專門為 WordPress 創建者構建的 AI 工具 CodeWP 的示例:

lepage-2023-07-24-at-12-45-16

結論

作為一名使用人工智能的 WordPress 開發人員,我經常發現自己需要使用 Python 快速模擬一些東西,甚至用該語言創建完整的生產級功能。

通過遵循這些方法,您可以在 WordPress 網站上快速運行 python 並訪問它可能產生的任何輸出。