Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组从PHP发送到Python,然后在Python中解析_Php_Python_Arrays - Fatal编程技术网

将数组从PHP发送到Python,然后在Python中解析

将数组从PHP发送到Python,然后在Python中解析,php,python,arrays,Php,Python,Arrays,当数组来自php文件时,我很难用python解析数组 test.php $count = 3; $before_json = array("qwe","wer","ert"); print_r($before_json ); $after_json = json_encode($before_json ); echo $after_json; $command = escapeshellcmd("test.py $after_json $cou

当数组来自php文件时,我很难用python解析数组

test.php

    $count = 3;
    $before_json = array("qwe","wer","ert");
    print_r($before_json );

    $after_json = json_encode($before_json );
    echo $after_json;

    $command = escapeshellcmd("test.py $after_json $count");
    $output = shell_exec($command);
    echo $output;
在json之前打印r$;将显示-数组[0]=>qwe[1]=>wer[2]=>ert

echo$after_json;将显示-[qwe、wer、ert]

py试验

    import sys
    after_json = sys.argv[1]
    count = sys.argv[2]
    print (device_id)
打印后,json将打印-[qwe、wer、ert]

在_之后打印json[1]将打印-q


如何让它打印出json之后的3个项目中的任何一个?

您仍然需要在Python中解析json字符串。您可以使用json模块进行以下操作:

import sys, json
after_json = sys.argv[1]
count = sys.argv[2]

parsed_data = json.loads(after_json)
print (parsed_data[0])  # will print "qwe"

您看到的问题是Python中缺少对JSON的解析,如所述

但是,当您将字符串发送到此行中的shell解释器时,还需要确保正确引用字符串:

$command = escapeshellcmd("test.py $after_json $count");
如果我们手动填写变量,我们将得到以下结果,不确定$count是什么,因此我假设值为3:

$command = escapeshellcmd("test.py [\"qwe\",\"wer\",\"ert\"] 3");
这只起作用,因为JSON的格式中没有空格。一旦解析的JSON中有了空格,Python脚本的shell调用就会完全失败。这也是一场安全噩梦,因为JSON数组的每个元素都可能导致shell中的任意代码执行

当你把论点传递给shell时,你必须避开它们。为此,应使用函数escapeshellarg

这可能是您想要做的:

$escaped_json = escapeshellarg($after_json)
$command = escapeshellcmd("test.py $escaped_json $count");
如果您不能100%确定$count是整数,还应该对该参数调用escapeshellarg。

after\u json=after\u json[1:-1]。拆分


在json为[qwe,wer,ert]之后,可以省略第一个和最后一个字符,然后拆分剩余的字符串,该字符串可以用逗号拆分

您忘记了在Python中解析json。导入json模块,然后可以使用json.loadsafter_json将json字符串转换为列表。更新:我觉得这应该是一个答案,而不是一个注释,但我会留下注释,因为它已经有了一些更新投票。首先让python程序做你期望它做的事情-你现在只是读取一个字符串并从字符串中输出第一个字符。。并尝试使用临时文件或管道在程序之间发送数据,而不是使用命令行。我做了您的更改,但得到的是空白输出$count只是一个计数器,我将在py脚本中使用它来循环。php是$count=3$_json=arrayqwe,wer,ert之前$after_json=json_encode$before_json$escape_json=escapeshellarg$after_json;$command=escapeshellcmdpython test.py$escaped_json$count$输出=shell_exec$命令;echo$输出;test.py是import sys,json escaped_json=sys.argv[1]count=sys.argv[2]parsed_data=json.loadsescaped_json print parsed_data[0]还注意到,在parsed_data=json.loadsescaped_json行之后执行一个简单的打印测试将不会打印如果我在test.py上打印转义_json,我得到这个[\qwe\,\wer\,\ert\]我通过写入一个文件,剥离[and],然后解析信息来实现这一切。感谢大家的输入虽然代码可能会解决问题,但一个好的答案也应该解释问题是什么以及代码是如何帮助的。