При вызове сценария Python из сценария PHP временный файл, созданный при запуске консоли, не создается с помощью вызова PHP - PullRequest
1 голос
/ 29 мая 2009

Сценарий:

У меня есть страница php, на которой я вызываю скрипт на python.

Скрипт Python при запуске из командной строки (Linux) показывает вывод в командной строке, а также записывает вывод в файл.

Скрипт Python при запуске через php тоже не подходит.

Разработка:

Я использую простую системную команду в PHP для запуска скрипта python:

/ вар / WWW / HTML / 1.php: system ('/ usr / python / bin / python3 ../cgi-bin/tabular.py 1');

/ вар / WWW / CGI-BIN / tabular.py - Этот файл python в основном анализирует файл данных, использует регулярное выражение python для поиска определенных заголовков и выводит заголовки в стандартный вывод, а также записывает его в файл.

В этом скрипте Python есть несколько подпрограмм, которые выполняются, поэтому я положил операторы print для отладки. Я заметил только несколько начальных выводов операторов вывода на странице PHP, все из функции, которая на самом деле что-то делает, не видны.

Также, как часть моего теста, я хорошо подумал, что скрипт py находится в другой папке, поэтому позвольте мне поменять его на папку / var / www / html.

Надеюсь, я достаточно подробно описал постановку задачи, и кто-то сможет воспроизвести эту проблему в конце. Если я сделаю какой-либо прогресс в этом вопросе, я аннотирую этот вопрос. Спасибо всем.

Gaurav

Ответы [ 3 ]

2 голосов
/ 29 мая 2009

Могу поспорить, что в вашем скрипте py есть какая-то ошибка, которая вызывает его, когда он вызывается изнутри PHP. Попробуйте

passthru('/usr/python/bin/python3 ../cgi-bin/tabular.py 1 2>&1');

для расследования (уведомление 2> & 1 , которое приводит к записи stderr в stdout).

1 голос
/ 29 мая 2009

Скорее всего, проблема с разрешением .

Если apache работает как apache, то у него не будет доступа для записи в файл, если

  1. Файл принадлежит apache
  2. Файл находится в группе apache и доступна для записи
  3. Файл доступен для записи в мире

Это «залипающая» проблема на многопользовательской машине, так как разные люди имеют доступ к Apache.

Попробуйте chmod 666 output.txt на файле, а затем повторите тест.


Вопросы:

  1. Пусть скрипт python записывает вывод в базу данных
  2. Используйте открытую функциональность PHP, чтобы открыть процесс и общаться по каналам
  3. Переписать с использованием регулярных выражений PHP
  4. Запишите выходной файл в / tmp и затем прочитайте результаты, используя PHP, как только скрипт python будет выполнен.
  5. и т.д ...
0 голосов
/ 29 мая 2009

Убедитесь, что у пользователя, который запускает скрипт python, есть права на запись в CWD. Кроме того, попробуйте shell_exec () или passthru () для вызова сценария, а не system ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...