Я очень новичок в php, и я довольно неплохо разбираюсь в том, как передавать аргументы с Python на php и наоборот. Теперь я знаю, как передавать одиночные переменные, но я все еще застрял и не могу найти ответ на этот вопрос:
Php вызывает сценарий Python (эта часть работает), которая возвращает список строк. Я хотел бы обработать этот список в php.
Когда я пытаюсь:
print mylist
в myscript.py, а затем:
$result = exec('python myscript.py')
похоже, что php понимает $ result как одну строку (что я согласен с пониманием).
Я понимаю, что, может быть, json может помочь или что мне как-то нужно использовать словарь вместо списка в python. Однако я не могу понять, как именно.
Если кто-то может помочь, он будет очень признателен! Благодаря!
Например:
myscript.py
import json D = {'foo':1, 'baz': 2} print json.dumps(D)
myscript.php
<?php $result = json_decode(exec('python myscript.py'), true); echo $result['foo'];
Вы используете stdin / stdout для передачи данных между программами, это означает, что вам придется каким-то образом закодировать структуру, чтобы ваша принимающая программа проанализировала элементы.
Простейшим было бы иметь вывод python как список, разделенный запятыми
Адам, Барри, Каин
и использовать
$result = explode(exec('python myscript.py'));
на стороне php, чтобы вернуть данные строки в массив.
Если данные непредсказуемы (могут содержать запятые) или более структурированы (больше, чем просто простой список), тогда вы должны пойти на что-то вроде json, как предложил Krab.
Видимо, ваш вопрос вводил в заблуждение. Был перенаправлен здесь, думая, что это решение для преобразования списков python в php-массив.
Публикация наивного решения для тех, кто хочет конвертировать списки в php-массив.
// Sample python list $data = '[["1","2","3","4"],["11","12","13","14"],["21","22","23","24"]]'; // Removing the outer list brackets $data = substr($data,1,-1); $myArr = array(); // Will get a 3 dimensional array, one dimension for each list $myArr =explode('],', $data); // Removing last list bracket for the last dimension if(count($myArr)>1) $myArr[count($myArr)-1] = substr($myArr[count($myArr)-1],0,-1); // Removing first last bracket for each dimenion and breaking it down further foreach ($myArr as $key => $value) { $value = substr($value,1); $myArr[$key] = array(); $myArr[$key] = explode(',',$value); } //Output Array ( [0] => Array ( [0] => "1" [1] => "2" [2] => "3" [3] => "4" ) [1] => Array ( [0] => "11" [1] => "12" [2] => "13" [3] => "14" ) [2] => Array ( [0] => "21" [1] => "22" [2] => "23" [3] => "24" ) )