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

时间:2017-10-21 18:40:48

标签: 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 $count");
    $output = shell_exec($command);
    echo $output;

print_r($ before_json);将显示 - 数组([0] => qwe [1] => wer [2] => ert)

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

py.test

    import sys
    after_json = sys.argv[1]
    count = sys.argv[2]
    print (device_id)

print(after_json)将打印 - [qwe,wer,ert]

print(after_json [1])将打印 - q

如何打印出after_json中的3个项目中的任何一个?

3 个答案:

答案 0 :(得分:0)

您仍然需要在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"

答案 1 :(得分:0)

您遇到的问题是缺少在Python中解析JSON,如rickdenhaan所述。

但是,当您将字符串发送到此行中的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

答案 2 :(得分:0)

after_json=after_json[1:-1].split(",")

after_json["qwe","wer","ert"]时,您可以省略第一个字符和最后一个字符,然后将剩余的字符串拆分为逗号