#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. Правильная архитектура? Трудно сказать без каких-либо подробностей. Любой из них имеет свое место, но если код уже написан, я бы просто использовал это.