Запуск файла 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 (обычно это не то, что вы хотите в рабочей среде).