Я пытаюсь передать некоторые параметры скрипту python через php-скрипт. Вот код:
$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.
До сих пор мне не везло. Любая помощь будет здорово. И спасибо.






Вам необходимо убедиться, что создаваемая вами строка аргумента отформатирована с пробелами, разделяющими ключи и значения. Включение переменной $item в командную строку не поможет. Вместо этого следует использовать подход, аналогичный Вот этот, для построения строки, содержащей имена аргументов CLI и аргументы, разделенные пробелами.
Непроверенный пример:
$arguments = "";
foreach ($item as $key => $value) {
$arguments .= sprintf(" %s %s" , $key , $value);
}
echo shell_exec("python quikkly-generate-code.py $arguments")
Если этот ответ решит вашу проблему, пожалуйста, проголосуйте и примите его. Это показывает будущим читателям, столкнувшимся с аналогичными проблемами, что этот подход действителен. Если это не решит вашу проблему, сообщите мне об этом в комментариях, чтобы я мог отредактировать ответ на предмет правильности.
Таким образом, очевидно, вы не можете поместить массив в строку и ожидать вывода, но точно так же вы не должны просто поместить строку в команду. Вам нужно сбежать от своих ценностей, чтобы предотвратить возможные проблемы из-за специальных символов, пробелов и т. д.
Просто запустите массив и создайте строку командной строки следующим образом:
$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 " . escapeshellarg($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.)
попробовал это и до сих пор не получаю выходной файл
Файл Python находится в том же каталоге, что и PHP? Укажите полные пути как к исполняемому файлу Python, так и к исходному файлу.
в любом случае я могу видеть сообщения об ошибках python? Я ничего не получаю от php.
Вместо этого используйте exec, см. edit. Скорее всего, вы не используете python. Убедитесь, что вы используете полный путь, как я сказал в своем предыдущем комментарии.
Примечание. Преобразование массива в строку в /home/gdqupqmy/public_html/test.php в строке 23. Команда завершилась с кодом 2, далее следует полный вывод: Массив
См. редактирование, забыл привести массив в строку, что должно быть довольно очевидно из вывода.
Давайте продолжить обсуждение в чате.
Я попробую это. Спасибо.