Получение PHP для запуска скрипта Python

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

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

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

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

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

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


person Abhinav    schedule 08.02.2010    source источник
comment
Не делайте этого, если у вас есть реальный трафик. Запуск нового скрипта Python (без mod-python) будет стоить вам дорого. Настройте отдельный долгоиграющий сервер Python (сервер xml-rpc?) и вызовите его с помощью IPC, если вам нужно масштабировать.   -  person wisty    schedule 08.02.2010
comment
Спасибо! Просто хотел сделать это как демонстрацию. Еще не разобрался с mod_wsgi/mod_python   -  person Abhinav    schedule 08.02.2010


Ответы (4)


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

person jdizzle    schedule 08.02.2010
comment
Просто чтобы охватить все основы, вы на самом деле печатаете $output, верно? Вы также должны попытаться выяснить, работает ли ваш веб-сервер в chroot. - person jdizzle; 10.02.2010

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

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

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

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

person Abhinav    schedule 12.02.2010

Мало контрольно-пропускных пунктов

  • script.py должен передавать полный путь, например, /home/abhinav/script.py
  • script.py должен быть исполняемым, chmod +x script.py
person YOU    schedule 08.02.2010
comment
script.py должен быть исполняемым, если не вызывается интерпретатор. - person LiraNuna; 08.02.2010
comment
Спасибо, и #!/usr/local/bin/python потребуется в первой строке script.py - person YOU; 08.02.2010
comment
Вам не нужен шебанг, если вы используете интерпретатор для вызова скрипта (python <filename>) - person ZeissS; 08.02.2010
comment
Я попытался указать полный путь к скрипту. Не работает. Браузер просто показывает пустую страницу и выполнение скрипта завершается. Этот же скрипт запускается из командной строки. - person Abhinav; 08.02.2010

Чтобы мой помощник 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;
    }
?>
person Ryan Buckley    schedule 22.01.2013