Связь между PHP и Python - PullRequest
9 голосов
/ 11 мая 2011

Я пытаюсь создать веб-интерфейс для некоторых скриптов Python. Дело в том, что я должен использовать PHP (а не CGI), и выполнение некоторых скриптов, которые я выполняю, занимает довольно много времени: 5-10 минут. Может ли PHP взаимодействовать со сценариями и отображать какой-то статус прогресса? Это должно позволить пользователю использовать веб-страницу во время выполнения задачи и отображать некоторое состояние в это время или просто сообщение, когда оно выполнено.

В настоящее время использую exec () и по завершении я обрабатываю вывод. Сервер работает на компьютере с Windows, поэтому pcntl_fork не будет работать.

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ : Использование другого php-скрипта для подачи информации о главной странице с помощью ajax, похоже, не работает, потому что сервер его убивает (оно достигает максимального времени выполнения, и я не хочу увеличивать его, если в этом нет необходимости)

Я думал о связи на основе сокетов, но не понимаю, насколько это полезно в моем случае (может быть, некоторые подсказки?

)

Спасибо

Ответы [ 4 ]

7 голосов
/ 11 мая 2011

Вы хотите межпроцессное взаимодействие . Розетки - это первое, что приходит на ум; вам нужно установить сокет на listen для соединения (на той же машине) в PHP и настроить сокет на connect с прослушивающим сокетом в Python и отправить это его статус.

Посмотрите этот обзор программирования сокетов из документации по Python и документацию по модулю Python socket (особенно примеры в конце) . Я уверен, что PHP имеет аналогичные ресурсы.

Если у вас есть более конкретное представление о том, что вы хотите построить, и вам нужна помощь, не стесняйтесь задавать новый вопрос в StackOverflow (если он еще не получен).

2 голосов
/ 11 мая 2011

Я думаю, вам придется использовать мета-обновление и, возможно, заставить python записать состояние в файл, а затем прочитать php из него.

Вы также можете использовать AJAX, чтобы сделать его более динамичным.

Также, вероятно, не следует использовать exec () ..., что открывает мир уязвимостей.

0 голосов
/ 19 июня 2014

Вы можете использовать службу очередей, такую ​​как Gearman , с клиентом на PHP и рабочим на Python или наоборот.

Кто-то создал пример настройки здесь.

https://github.com/dbaltas/gearman-python-worker

0 голосов
/ 11 мая 2011

К сожалению, мой друг, я верю, что вам нужно будет использовать сокеты, как вы и просили. :( У меня мало опыта работы с ними, но Этот урок Python по сокетам / сетевому программированию может помочь вам получить необходимое взаимодействие с сокетами Python. (Ссылки Бо Мартинеса также кажутся многообещающими.)

Вам также необходимо получить несколько соединений с сокетом PHP, чтобы он мог запрашивать статус.

Продолжая это, я думаю, что ваш скрипт на Python, скорее всего, будет работать в цикле. Поэтому я бы поставил проверку «Проверить запрос статуса» в начале части этого цикла. Он отвечал бы на один статус, а более поздний цикл внутри этого скрипта отвечал бы с повышенным статусом ... и т. Д.

Удачи!

Редактировать: Я думаю, что рекомендация Томаса Шульца о записи в файл, вероятно, является самой простой в реализации. Единственным недостатком является ожидание открытия файла - вам нужно убедиться, что ваши скрипты PHP и Python не зависают и не возвращают ошибку, не пытаясь снова.

...