Передача параметров в скрипт python через php

Я пытаюсь передать некоторые параметры скрипту 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.

До сих пор мне не везло. Любая помощь будет здорово. И спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
596
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам необходимо убедиться, что создаваемая вами строка аргумента отформатирована с пробелами, разделяющими ключи и значения. Включение переменной $item в командную строку не поможет. Вместо этого следует использовать подход, аналогичный Вот этот, для построения строки, содержащей имена аргументов CLI и аргументы, разделенные пробелами.

Непроверенный пример:

$arguments = "";
foreach ($item as $key => $value) {
    $arguments .= sprintf(" %s %s" , $key , $value);
}
echo shell_exec("python quikkly-generate-code.py $arguments")

Я попробую это. Спасибо.

ggntc 04.04.2019 00:11

Если этот ответ решит вашу проблему, пожалуйста, проголосуйте и примите его. Это показывает будущим читателям, столкнувшимся с аналогичными проблемами, что этот подход действителен. Если это не решит вашу проблему, сообщите мне об этом в комментариях, чтобы я мог отредактировать ответ на предмет правильности.

Emmett Butler 04.04.2019 00:19
Ответ принят как подходящий

Таким образом, очевидно, вы не можете поместить массив в строку и ожидать вывода, но точно так же вы не должны просто поместить строку в команду. Вам нужно сбежать от своих ценностей, чтобы предотвратить возможные проблемы из-за специальных символов, пробелов и т. д.

Просто запустите массив и создайте строку командной строки следующим образом:

$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.)

попробовал это и до сих пор не получаю выходной файл

ggntc 05.04.2019 18:46

Файл Python находится в том же каталоге, что и PHP? Укажите полные пути как к исполняемому файлу Python, так и к исходному файлу.

miken32 05.04.2019 18:50

в любом случае я могу видеть сообщения об ошибках python? Я ничего не получаю от php.

ggntc 05.04.2019 18:55

Вместо этого используйте exec, см. edit. Скорее всего, вы не используете python. Убедитесь, что вы используете полный путь, как я сказал в своем предыдущем комментарии.

miken32 05.04.2019 18:58

Примечание. Преобразование массива в строку в /home/gdqupqmy/public_html/test.php в строке 23. Команда завершилась с кодом 2, далее следует полный вывод: Массив

ggntc 05.04.2019 19:12

См. редактирование, забыл привести массив в строку, что должно быть довольно очевидно из вывода.

miken32 05.04.2019 19:16

Давайте продолжить обсуждение в чате.

ggntc 05.04.2019 19:25

Другие вопросы по теме