Я не могу заставить php показывать полные результаты моего скрипта на python, печатается только последнее базовое утверждение print. Что я здесь не так делаю? Почему php не показывает вывод скрипта python?

PHP

$result = exec('python list.py');
echo $result;

List.py

import subprocess

print "start"

a = subprocess.Popen(["ls", "-a"], stdout=subprocess.PIPE)
a.wait()
result_str = a.stdout.read()
print result_str

print "stop"

Вывод командной строки для этого скрипта Python, как показано ниже

start
...filename
...filename
...etc...etc

stop

Вывод php от выполнения сценария python только

стоп

Спасибо

0
Anthony 2 Апр 2017 в 07:05

2 ответа

Лучший ответ

Вам нужно передать $result в качестве параметра в exec(), иначе вы получите только последнее утверждение.

exec('python list.py', $result);
print_r($result);

Это получит массив выходных данных, $result[0] будет содержать stop, а $result[sizeof($result)-1] будет содержать stop, а все, что находится между ними, будет содержать остальную часть вывода вашей программы.

2
Augwa 2 Апр 2017 в 04:24

exec будет всегда возвращать последнюю строку результата команды . Итак, если вам нужно получить каждую строку вывода от выполненной команды. Затем вам нужно написать, как показано ниже:

$result = exec('python list.py', $ouput);
print_r($output)

Согласно exec документации

string exec ( string $command [, array &$output [, int &$return_var ]] )

Если присутствует аргумент output, указанный массив будет заполнен каждой строкой вывода команды. Трейлинг Пробелы, такие как \ n, не включены в этот массив. Обратите внимание, что если массив уже содержит некоторые элементы, exec () добавится к конец массива. Если вы не хотите, чтобы функция добавляла элементы, вызовите unset () для массива перед передачей его в exec ().

2
Ravi 2 Апр 2017 в 04:31