将 json 字符串从 php 传递到 python

passing json string from php to python

我正在尝试在 php 脚本中调用 python 脚本。但是,我似乎无法弄清楚如何将输入传递给 python 脚本。 我使用的代码如下:

$input = '[{"item": "item1"}, {"item": "item2"}, {"item": "item3"}]';
$output = passthru("/usr/bin/python3.5 /path/python_script.py $input");

python 中的输出是一个列表,它是通过按空格拆分字符串创建的,即 ' ',同时删除引号:

['/path/python_script.py', '[{item:', 'item1},', '{item:', 'item2},', '{item:', 'item3}]']

将 json 字符串传递给 python 最直接的方法是什么?

将python脚本用作CGI脚本,并将参数传递给Python CGI脚本,就像将参数传递给API或URL一样。

Python CGI 教程:https://www.tutorialspoint.com/python/python_cgi_programming.htm

要解决您的问题,您需要将 json 作为字符串传递。 在你的 PHP 中它是一个字符串,但是当你调用 passthru 时,它被转换为命令行。所以它调用 python 是这样的:

/usr/bin/python3.5 /path/python_script.py [{"item": "item1"}, {"item": "item2"}, {"item": "item3"}]

Python 确实在 space 上将其拆分并将每个部分视为一个参数。如果可能的话,解决方案是将它包装在一个字符串中以便通过:

$output = passthru("/usr/bin/python3.5 /path/python_script.py '$input'");

然后在您的 python 脚本中,您可以按照 here 所述使用 json.loads。

如果你不能用字符串包装它,你可以在你的python脚本中手动将它们放在一起:

''.join(sys.argv[1:]) # leaving out the first index, filename.