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

PHP向Python传递字符串数组时JSON交互失效,寻求解决方案

问题:PHP传递字符串数组JSON到Python失败

我尝试将PHP文件中的数据以JSON格式传递到Python文件,使用整数数组时一切正常,但改成字符串数组(注释第2行,取消注释第3行)后代码便无法正常运行,最终需要处理表单数据,但当前无法实现。

PHP代码

<?php
$input = array(1,2,3);
//$input = array('test', 'test');
$input = json_encode($input);
$output = exec("form.py ". escapeshellarg($input));
var_dump($output);
echo "<p>Output from Python: <br>" . $output . "<p>";
echo "Dump the output from Python as JSON<br>";
var_dump(json_decode($output));
$data = json_decode($output);
echo "Accessing from JSON array:<br>";
foreach($data as $key=>$value) {
    echo "[" . $key . "] => " . $value . "<br>";
}
?>

Python代码

import sys
import json

output = []
output.append("Values submitted: " + str(sys.argv))

j = json.loads(sys.argv[1])

for k in j:
    output.append("Return from json: " + str(k))
print(json.dumps(output))

错误信息

string(0) ""
Output from Python:

Dump the output from Python as JSON NULL
Accessing from JSON array:

Warning: foreach() argument must be of type array|object, null given
in C:\xampp\htdocs\test\form_action.php on line 11

解决方案

1. 指定Python解释器执行脚本

Windows环境下直接执行.py文件可能存在关联问题,导致PHP无法正确捕获输出。修改PHP中的exec命令,明确指定Python解释器路径(若Python已加入系统环境变量,直接用python或python3即可):

$output = exec("python form.py ". escapeshellarg($input));

2. 捕获Python的错误输出

exec默认只捕获脚本的stdout输出,若Python脚本抛出错误(如JSON解析失败),错误信息会输出到stderr,无法被PHP获取。修改PHP代码,将stderr重定向到stdout,同时捕获所有输出行:

$command = "python form.py ". escapeshellarg($input) . " 2>&1";
exec($command, $output_lines, $return_code);
$output = implode("\n", $output_lines);
// 后续输出逻辑不变

这样就能看到Python脚本的具体错误,方便排查问题。

3. 修正PHP代码中的语法笔误

原代码第3行有多余空格://$ input,修正为//$input,避免潜在的语法问题。

4. 确保Python脚本的输出编码正确

在Windows环境下,Python的标准输出可能存在编码问题,导致JSON输出被截断或乱码。可以在Python的print语句中指定编码:

print(json.dumps(output).encode('utf-8').decode('utf-8'))

或者在脚本开头添加编码声明:

# -*- coding: utf-8 -*-

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:52:20