Получение PHP для запуска скрипта Python - PullRequest
13 голосов
/ 08 февраля 2010

Я пытаюсь запустить программу на Python, используя PHP. Вот код

$command = '/usr/local/bin/python script.py file';
$temp = exec($command, $output);

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

Любая помощь будет оценена!

Редактировать 1:

Пытался использовать proc_open, но ничего не происходит. Я дал полный путь к сценарию. Сделал скрипт исполняемым, но не повезло. Любые другие вещи, которые я могу попробовать на сервере? (Это CentOS 5)

Ответы [ 4 ]

6 голосов
/ 08 февраля 2010

Вам необходимо передать полный путь к сценарию, а также убедиться, что сценарий доступен для чтения пользователю, работающему с веб-сервером (это означает, что каждый каталог в пути должен быть + x для пользователя сети).

6 голосов
/ 12 февраля 2010

Понял, что было не так:

  1. Домен был настроен как виртуальный хост, а PHP safe_mode был включен. Я думаю, proc_open, exec, system, passthru и т. д. не работают в safe_mode.

  2. Поместите скрипт в каталог, доступный для vhost. Apache не смог получить доступ к каталогам вне корня документа vhost.

Спасибо за помощь!

2 голосов
/ 08 февраля 2010

Несколько контрольных точек

  • script.py должен пройти полный путь, например, /home/abhinav/script.py
  • script.py должен быть исполняемым, chmod +x script.py
0 голосов
/ 22 января 2013

Чтобы мой помощник CodeIgniter мог запустить скрипт на python, мне пришлось поместить #! / Usr / bin / python в первую строку моего скрипта на python, а НЕ вызывать python из exec.

+ 1 для выполнения chmod + x

Мой помощник выглядит так:

<?php
    function scrape($site, $key, $user_id)
    {
        $cmd = str_replace('system/','',BASEPATH).APPPATH."python/spider.py -u $site -k $key -i $user_id";
        $resp = exec($cmd, $out);
        return $out;
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...