Запуск файла Python из php не создает выходной файл

У меня проблема с запуском другого файла из php. Я хочу, чтобы мои php params были результатом работы с файлом python, который сам вызывает другой файл.

Вот мой файл php:

<?php
    if (isset($_POST['submit'])) {
    $params = solve();
}

function solve() {
  exec("python array.py", $output);
  return $output;
}
?>

Если array.py просто:

if __name__ == "__main__":
    print 1
    print 2
    print 3
    print 4

Я получу 1,2,3,4 для своего вывода, но как только я изменю array.py на следующий файл, который вызывает os.system, я ничего не получу. Итак, новый array.py:

import os

def main():
    os.system("python test.py") #test.py creates tmp.txt with 4 lines w/ values 1,2,3,4


def output():
    f = open("tmp.txt", "r")
    myReturn = []
    currentline = f.readline()

    while currentline:
          val = currentline[:-1]  #Getting rid of '\n'
          val = int(val)
          myReturn = myReturn + [val]
          currentline = f.readline()
    f.close()
    return myReturn


if __name__ == "__main__":
     main()
     o = output()
     print o[0]
     print o[1]
     print o[2]
     print o[3]

Также, если я просто запускаю test.py, на выходе будет файл tmp.txt:

 1
 2
 3
 4

Так что теперь, когда я запускаю свой php-файл, выходной файл tmp.txt даже не создается в каталоге, и в результате я также не получаю никакого вывода из моего php. Я не уверен, почему это происходит, потому что когда я сам запускаю array.py, я получаю желаемый результат, и создается файл tmp.

РЕДАКТИРОВАТЬ: я забыл включить: импорт ОС выше.

1 ответ

Решение

Измените exec на:

exec("python array.py 2>&1", $output)

Или проверьте веб-сервер или журнал ошибок php. Это вернет вывод ошибок из скрипта python в ваш скрипт php (обычно это не то, что вы хотите в рабочей среде).

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