我正在使用以下代码启动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);
有了这个,我无法在python端解码JSON。我已经能够在python中对数组变量(未解码)进行基本打印,但它将每个单独的字符作为新的数组值。即[0] = k,[1] = e,[2] = y,[3] = 1等... 非常感谢任何帮助。
为了清楚起见,我正在寻找一种比编码和解码数组更简单的方法。有没有办法我可以格式化exec行以允许多个变量。
答案 0 :(得分:1)
将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')]
变量 lines 现在包含所有php数据作为python列表。