如何在 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 并访问它可能产生的任何输出。