我试图在PHP脚本中调用Python脚本。但是,我似乎无法弄清楚如何将输入传递到Python脚本。我使用的代码如下:
$input = '[{"item": "item1"}, {"item": "item2"}, {"item": "item3"}]';
$output = passthru("/usr/bin/python3.5 /path/python_script.py $input");
Python中的输出是通过将字符串划分为spaces(即
['/path/python_script.py', '[{item:', 'item1},', '{item:', 'item2},', '{item:', 'item3}]']
将JSON字符串传递到Python的最直接方法是什么?
要解决您的问题,您需要将JSON作为字符串传递。在您的php中,这是一个字符串,但是当您调用PassThru时,它会转换为命令行。因此,它称为Python:
/usr/bin/python3.5 /path/python_script.py [{"item": "item1"}, {"item": "item2"}, {"item": "item3"}]
python确实将其拆分在空间上,并将每个部分视为参数。解决方案是将其包裹在字符串中以进行通行:
$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.
使用Python脚本作为CGI脚本,然后将参数传递给Python CGI脚本,就像您将参数传递给API或URL一样。
Python CGI教程:https://www.tutorialspoint.com/python/python/python_cgi_programming.htm