Как запускать скрипты Python в WordPress

Опубликовано: 2023-08-03

Популярность Python продолжает расти благодаря простоте использования, мощным библиотекам и простому синтаксису. Я часто делаю прототипы отдельных функций для WordPress с помощью Python, прежде чем конвертировать их в PHP.

Но вместо этого, почему бы просто не запустить Python на WordPress? В этом посте мы обсудим различные методы, которые можно использовать для запуска кода Python непосредственно на веб-сайте WordPress.

Запуск скриптов Python на WordPress

Мы можем использовать встроенную в PHP функцию exec() для запуска внешних скриптов, в том числе из Python. Для работы потребуется немного кода как на PHP, так и на Python, но это довольно просто, если вы понимаете, как все сочетается друг с другом.

Дэвид-клоуд-ojlt2xbwuws-unsplash-1

Мы можем либо создать плагин, либо фрагмент кода. Это зависит от того, что вы хотите создать, но я обычно создаю фрагмент кода, которым легче управлять во внешнем интерфейсе веб-сайта.

Во-первых, убедитесь, что Python глобально установлен на вашем сервере. Вы можете сделать это самостоятельно, если у вас есть root-доступ, если нет, вам нужно будет попросить своего веб-хостинга установить его. Например, в Cloudways нам нужно было, чтобы они установили для нас Python.

PHP-функция

Мы создадим код для создания функции PHP, которая будет запускать любой скрипт Python в WordPress. Для простоты использования я сначала покажу вам фрагмент кода, который можно использовать с плагином Code Snippet Management. Затем мы можем взглянуть на создание собственного плагина, который будет делать то же самое.

С помощью этой функции все скрипты Python находятся в медиатеке, и мы можем выбрать скрипт для запуска, указав идентификатор элемента медиатеки. Имейте в виду, что вам, вероятно, потребуется разрешить загрузку mime-типа Python. Я использовал этот плагин, чтобы включить его.

Это выглядит немного сложно, потому что в итоге я добавил много обработки ошибок. Но по своей сути весь код находит файл в медиатеке и запускает скрипт, выводя все, что он в конечном итоге возвращает.

Обратите внимание, что я использовал «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('Ошибка выполнения скрипта Python. Command: ' . $python_command); return 'Ошибка выполнения скрипта Python.'; } } else { // Медиафайл не найден, регистрируем ошибку и возвращаем сообщение об ошибке error_log('Медиафайл не найден для идентификатора мультимедиа ' . $media_id); return 'Медиафайл не найден.'; } } // Пример использования с идентификатором носителя 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 Plugin Описание: Плагин для выполнения скриптов 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('Ошибка выполнения скрипта Python. Command: ' . $python_command); return 'Ошибка выполнения скрипта Python.'; } } else { // Файл скрипта Python не найден, регистрируем ошибку и возвращаем сообщение об ошибке error_log('Файл скрипта Python не найден: ' . $python_script_path); return 'Файл скрипта Python не найден.'; } }

Для плагина быстрее включить скрипты Python в определенный каталог (в данном примере это assets/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('Ошибка выполнения скрипта Python. Command: ' . $python_command); return 'Ошибка выполнения скрипта Python.'; } } else { // Медиафайл не найден, регистрируем ошибку и возвращаем сообщение об ошибке error_log('Медиафайл не найден для идентификатора мультимедиа ' . $args['media_id']); return 'Медиафайл не найден.'; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

Теперь вы можете использовать шорткод [run_python_script media_] прямо в своих сообщениях и на страницах. Замените «6» на идентификатор медиафайла, который вы хотите использовать.

Используйте размещенную службу

Существуют десятки размещенных сервисов, которые позволяют вам получить доступ к Python через API. Это может быть полезно для более сложных проектов и рабочих процессов, особенно если вы можете получить доступ к выходным данным в PHP (используя CURL) так же, как если бы вы создали свой собственный плагин.

Во-первых, вам нужно создать API с Python. Вот хороший ресурс для этого. По сути, вы будете использовать Flask для создания веб-приложения, которое предоставляет конечные точки API. Затем вы разместите это веб-приложение с помощью одной из этих служб и получите доступ к различным конечным точкам API с помощью PHP.

Вот пример приложения Python с API:

# api.py import random from flask import Flask, request, jsonify app = Flask(__name__) Things_list = [ "Яблоко", "Банан", "Морковь", "Собака", "Слон", "Цветок", "Гитара" , «Дом», «Иглу», «Куртка» ] @app.route('/api/data', методы=['POST']) def process_data(): data = request.get_json() message = data.get ('сообщение') random_thing = random.choice(things_list) response_data = {'ответ': f'Получено сообщение: {сообщение}. Случайная вещь: {random_thing}'} возвращает jsonify(response_data), если __name__ == '__main__': app.run(debug=True)

И как я получу к нему доступ в PHP, что позволит мне использовать эти данные в WordPress (будь то изменение полей базы данных, добавление нового пользователя и т. д.)

<?php // URL конечной точки API $apiUrl = 'http://your-python-api-domain.com/api/data'; // Данные для отправки в API Python $data = array( 'message' => 'Привет из 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('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, правда); // Выполнить сеанс cURL и получить ответ $response = curl_exec($ch);

Теперь, имея данные $response, вы можете использовать их с любыми функциями WordPress. Это базовый пример, но он хорошо показывает, как вы это сделаете.

Если вы немного разбираетесь в технологиях и хотите что-то дешевое, я бы посоветовал развернуть ваше приложение Python с помощью Digital Ocean, которое стоит 2,50 доллара в месяц для простых вещей.

Если вам нужно что-то быстрое, простое и легкое, посетите PythonAnywhere.com, стоимость которого начинается от 5 долларов в месяц.

Помимо небольших сценариев, этот метод, вероятно, является лучшим способом сделать что-то.

Преобразовать Python в PHP

Другим вариантом было бы просто преобразовать Python в PHP и использовать плагин, такой как фрагменты кода, для запуска этой функции.

Вы можете вручную преобразовать его в PHP или использовать такой инструмент, как ChatGPT или CodeWP, чтобы вставить его в Python и запросить его переписывание в PHP. Вот пример с CodeWP, инструментом искусственного интеллекта, специально созданным для создателей WordPress:

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

Заключение

Будучи разработчиком WordPress, работающим с искусственным интеллектом, я часто обнаруживаю, что мне нужно быстро что-то смоделировать с помощью Python или даже создать полные функции производственного уровня на языке.

Следуя этим методам, вы можете быстро запустить python на сайте WordPress и получить доступ к любому результату, который он может произвести.