将JSON数据从PHP传递到Python脚本

azu*_*ake 8 php python json

我希望能够将PHP数组传递给Python脚本,该脚本将利用数据执行某些任务.我想尝试使用shell_exec()从PHP执行我的Python脚本,并将JSON数据传递给它(我完全是新手).

$foods = array("pizza", "french fries");
$result = shell_exec('python ./input.py ' . escapeshellarg(json_encode($foods)));
echo $result;
Run Code Online (Sandbox Code Playgroud)

"escapeshellarg(json_encode($ foods)))"函数似乎将我的数组移交给Python脚本(如果我'回显'函数,我得到这个值:

'["pizza","french fries"]'
Run Code Online (Sandbox Code Playgroud)

然后在Python脚本中:

import sys, json
data = json.loads(sys.argv[1])
foods = json.dumps(data)
print(foods)
Run Code Online (Sandbox Code Playgroud)

这会将以下内容打印到浏览器:

["pizza", "french fries"]
Run Code Online (Sandbox Code Playgroud)

这是一个普通的旧字符串,而不是列表.我的问题是,我怎样才能最好地将这些数据视为列表,或者我可以使用","作为分隔符迭代的某种数据结构?我真的不想将文本输出到浏览器,我只是希望能够将列表分解成碎片并将它们插入到文件系统的文本文件中.

小智 5

有同样的问题

让我告诉你我做了什么

PHP的:

base64_encode(json_encode($bodyData))
Run Code Online (Sandbox Code Playgroud)

然后

json_decode(shell_exec('python ' . base64_encode(json_encode($bodyData)) );
Run Code Online (Sandbox Code Playgroud)

在Python中

import base64
Run Code Online (Sandbox Code Playgroud)

content = json.loads(base64.b64decode(sys.argv[1]))
Run Code Online (Sandbox Code Playgroud)

正如Em L已经提到的:)

它为我干杯!

  • 它可以在 PHP 到 Python 中使用多维数组。 (2认同)

小智 1

您可以foods对字符串进行base64转换,然后将数据传递给Python并对其进行解码。例如:

import sys, base64
if len(sys.argv) > 1:
    data = base64.b64decode(sys.argv[1])
    foods = data.split(',')
    print(foods)
Run Code Online (Sandbox Code Playgroud)