You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP在XAMPP服务器实现带交互的Python脚本执行?

解决PHP调用带输入的Python脚本无法交互的问题

问题根源

shell_exec是一次性同步执行并获取输出的函数,当Python脚本执行到input()时会阻塞等待控制台输入,但PHP无法向运行中的Python进程实时传递输入,导致脚本卡在输入步骤,只能输出初始提示,无法继续执行后续逻辑。

实现网页交互的方案

要在网页上实现类似命令行的交互效果,需要通过PHP接收用户输入,再将输入传递给Python脚本执行,具体分两步修改:

1. 重构PHP脚本,添加输入表单与提交处理

创建一个兼具表单展示和脚本调用功能的PHP页面:

<?php
$python_path = 'C:\Users\alona\AppData\Local\Programs\Python\Python39\python.exe';
$result = '';

// 处理用户提交的表单数据
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['country'])) {
    // 转义输入内容,避免命令注入风险
    $country_input = escapeshellarg($_POST['country']);
    // 构造调用命令,将输入作为参数传给Python脚本
    $command = "{$python_path} my_script.py {$country_input}";
    // 执行命令并获取输出
    $result = shell_exec($command);
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>时区时间查询</title>
</head>
<body>
    <h3>查询指定时区的当前时间</h3>
    <form method="POST">
        <label>输入时区(如America/Toronto、Europe/London):</label>
        <input type="text" name="country" required>
        <button type="submit">查询时间</button>
    </form>
    <?php if (!empty($result)): ?>
        <div style="margin-top: 20px; padding: 10px; background: #f0f8ff;">
            <?php echo nl2br($result); ?>
        </div>
    <?php endif; ?>
</body>
</html>

2. 修改Python脚本,从命令行参数获取输入

将原Python脚本的input()改为读取命令行参数,这样PHP可以直接传递用户输入:

import pytz
from datetime import datetime
import sys

# 检查是否传入了时区参数
if len(sys.argv) < 2:
    print("请提供有效的时区名称(如America/Toronto)")
    sys.exit(1)

timezone_name = sys.argv[1]
try:
    target_timezone = pytz.timezone(timezone_name)
    current_time = datetime.now(target_timezone)
    print(f"The time in your timezone is: {current_time.strftime('%H:%M:%S')}")
except pytz.UnknownTimeZoneError:
    print(f"未知时区:{timezone_name},请使用如'America/Toronto'的标准时区格式")

关键注意点

  • 安全防护:必须用escapeshellarg()转义用户输入,防止恶意输入触发命令注入攻击。
  • 时区格式说明:pytz要求时区为区域/城市格式(如America/Toronto),而非单纯的国家名(如Canada),所以需要在表单提示中明确告知用户,避免报错。
  • 替代方案(不推荐):如果一定要保留Python脚本的input()逻辑,可以使用PHP的proc_open()函数创建双向管道与Python进程交互,但这种方式实现复杂且容易出现阻塞问题,远不如命令行参数的方式稳定可靠。

内容的提问来源于stack exchange,提问作者Alon Alush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:35:01