通过php将参数传递给python脚本

时间:2019-04-03 22:04:39

标签: php python

我正在尝试通过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图像文件。

到目前为止,我还没有运气。任何帮助都会很棒。谢谢。

2 个答案:

答案 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运行。)