передача строки json из php в python

Я пытаюсь вызвать скрипт Python в PHP-скрипте. Тем не менее, я не могу понять, как передать вход в скрипт 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?

0

Решение

Чтобы решить вашу проблему, вам нужно передать JSON в виде строки.
В вашем PHP это строка, но в тот момент, когда вы вызываете passthru, она преобразуется в командную строку. Так он называет Python так:

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

Python действительно разбивает его на пространство и рассматривает каждую часть в качестве аргумента. Решение будет заключаться в том, чтобы обернуть его в строку для passthru, если это возможно:

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

Затем в вашем скрипте Python вы можете использовать json.loads, как описано Вот.

Если вы не можете обернуть его в строку, вы можете сделать это в сценарии yout python, чтобы собрать все вместе вручную:

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

Другие решения

Используйте скрипт Python в качестве скрипта CGI и передавайте аргументы скрипту Python CGI так же, как вы передаете параметры в API или URL.

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

0

По вопросам рекламы [email protected]