как передать многие php-переменные на python

Я использую следующий код для запуска сценария python и передачи ему переменной php.

$tmp = exec("python path/to/pythonfile.py $myVariable $mySecondVariable", $output); 

Это работает очень хорошо, моя проблема в том, что мне нужно будет передать более 100 переменных в скрипт python. Я не хочу, чтобы эта строка exec стала чрезвычайно длинной и неуправляемой. Я также изучил передачу массива php вместо переменной со следующим кодом:

 $checked = array( "key1" => "1" "key2" => "1" "key3" => "1" ); $checkedJson = json_encode($checked); $tmp = exec("python path/to/pythonfile.py $myVariable $checkedJson", $output); 

С этим я не смог декодировать JSON на стороне python. Я смог сделать базовую распечатку переменной массива (некодированной) в python, но он дает каждый отдельный символ как новое значение массива. т.е. [0] = k, [1] = e, [2] = y, [3] = 1 и т. д. Любая помощь приветствуется.

Чтобы быть ясным, я ищу более простой метод, чем кодирование и декодирование массива. Есть ли способ, которым я могу форматировать строку exec, чтобы допускать несколько переменных.

    Related of "как передать многие php-переменные на python"

    Сохраните переменные PHP во временном текстовом файле, затем используйте python для чтения этого файла.

    Простой и эффективный.


    Предполагая, что скрипты находятся в одном каталоге

    Часть PHP

    длинная версия (автономный скрипт – пропустите короткую версию ниже, если вам нужен только фрагмент кода)

     <?php #Establish an array with all parameters you'd like to pass. #Either fill it manually or with a loop, ie: #Loop below creates 100 dummy variables with this pattern. #You'd need to come up with a way yourself to fill a single array to pass #$variable1 = '1'; #$variable2 = '2'; #$variable3 = '3'; #.... #$variableN = 'N'; #... for ($i=1; $i<=100; $i++) { ${'variable'.$i} = $i; } #Create/Open a file and prepare it for writing $tempFile = "temp.dat"; $fh = fopen($tempFile, 'w') or die("can't open file"); #let's say N=100 for ($i=1; $i<=100; $i++) { #for custom keys $keyname = 'Key'.$i; # using a variable variable here to grab $variable1 ... $variable2 ... $variableN ... $variable100 $phpVariablesToPass[$keyname] = ${'variable'.$i} + 1000; } #phpVariablesToPass looks like this: # [Key1] => 1001 [Key2] => 1002 [Key3] => 1003 [KeyN] = > (1000+N) #now write to the file for each value. #You could modify the fwrite string to whatever you'd like foreach ($phpVariablesToPass as $key=>$value) { fwrite($fh, $value."\n"); } #close the file fclose($fh); ?> 

    или, короче говоря, при условии, что $ phpVariablesToPass – это массив, заполненный вашими значениями:

     #Create/Open a file and prepare it for writing $tempFile = "temp.dat"; $fh = fopen($tempFile, 'w') or die("can't open file"); foreach ($phpVariablesToPass as $key=>$value) { fwrite($fh, $value."\n"); } fclose($fh); 

    Фрагмент Python для захвата данных

     lines = [line.strip() for line in open('temp.dat')] 

    переменные строки теперь содержат все ваши данные php в виде списка python.