Команда PHP exec не возвращает полные данные из скрипта Python

#php #python #ssh #centos #exec

#php #python #ssh #centos #exec

Вопрос:

Я подключаюсь к серверу через PHP SSH, а затем использую exec для запуска программы python на этом сервере.

Если я подключусь к этому серверу через putty и выполню ту же команду через командную строку, я получу результат, подобный:

Оценка….

Подключение….

Извлечение данных….

1) Оператор 1

2) Оператор 2

.

.

.

N) Оператор N

Программа на Python написана кем-то другим…

Когда я подключаюсь через SSH php, я могу выполнить $ssh->exec("ls") и получить полные результаты так же правильно, как в командной строке сервера. Но когда я пытаюсь $ssh->exec("python myscript.py -s statement 0 0 0"); , я не могу получить полные результаты, но я получаю случайную строку в качестве вывода.

В общем, если кто-то столкнулся с такой же проблемой и решил ее, пожалуйста, дайте мне знать.

Спасибо

Комментарии:

1. Какие случайные строки? Можете ли вы показать пример?

2. Извините, я не могу показать результат. Но подумайте о том, чтобы иметь 23) оператор 23 в качестве вывода. Но у вас должен был быть вывод, как в вопросе

Ответ №1:

Возможно, это вызвано буферизацией выходных данных. Попробуйте добавить эту -u опцию в свою команду Python — это заставляет stdout, stdin и stderr не буферизоваться.

Комментарии:

1. Где в этой строке? $ssh-> exec(«python myscript.py -s заявление 0 0 0»);

2. Еще одна вещь, которую я хочу спросить: если я получу результат с помощью вашего метода, каков способ правильной архитектуры вывода? Например, json или xml?

3. Добавить -u после python : $ssh->exec("python -u myscript.py -s statement 0 0 0")

4. Правильная архитектура? Трудно сказать без каких-либо подробностей. Любой из них имеет свое место, но если код уже написан, я бы просто использовал это.