我正在尝试通过php脚本将一些参数传递给python脚本。这是代码:
$item=array(
'--native-libs-dir' => "/home/gdqupqmy/quikklyLib/",
'--type' => "template0001style1",
'--data'=> "12345",
'--join' => "horizontal",
'--output-file' => "/home/gdqupqmy/quikklyLib/saavr-12345.svg");
echo shell_exec("python quikkly-generate-code.py '$item'");
python脚本创建一个svg图像文件。
到目前为止,我还没有运气。任何帮助都会很棒。谢谢。
答案 0 :(得分:1)
您需要确保所创建的参数字符串的格式使用空格分隔键和值。在命令字符串中包含变量CREATE OR REPLACE FUNCTION getlatlng(geom geometry, OUT longitude text, OUT latitude text)
RETURNS record
LANGUAGE sql
IMMUTABLE
AS $function$
SELECT ...;
$function$
不会这样做。相反,您应该使用类似于this one的方法来构建包含CLI参数名称和以空格分隔的参数的字符串。
一个未经测试的例子:
$item
答案 1 :(得分:1)
因此,显然您不能将数组放入字符串中并期望输出,但是类似地,您也不应该只是将字符串放入命令中。您需要escape your values来防止由于特殊字符,空格等引起的可能问题。
只需遍历数组并构建如下的命令行字符串:
$item = array(
'--native-libs-dir' => '/home/gdqupqmy/quikklyLib/',
'--type' => 'template0001style1',
'--data'=> '12345',
'--join' => 'horizontal',
'--output-file' => '/home/gdqupqmy/quikklyLib/saavr-12345.svg'
);
$args = "";
foreach ($item as $k=>$v) {
$args .= " $k " . "$v";
}
$cmd = "/usr/bin/python /full/path/to/quikkly-generate-code.py $args";
$result = exec($cmd, $output, $return);
printf("Command exited with code %d, full output follows: %s", $return, print_r($output,1));
这确保所有值都被引用和转义。 (我假设数组键是固定值,因此并不危险,如果不是这种情况,它们也可以通过escapeshellarg
运行。)