当数组来自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个项目中的任何一个?
答案 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"]
时,您可以省略第一个字符和最后一个字符,然后将剩余的字符串拆分为逗号