2014-09-02 3 views
1

Я хотел бы запустить приложение python из php-скрипта, который работает на веб-сервере. Пока, так хорошо. Я пробовалВызов командной строки из PHP не выполнен

passthru("python track.py"); 

но это не сработало. Просто ничего не случилось. Я попробовал exec() и system(), а просто чтобы убедиться. Затем я попытался запустить PHP скрипт с:

passthru("php test.php"); 
passthru("/usr/bin/php test.php") 

Еще ничего не происходит. Но a

passthru("ls") 

просто работает нормально, как ожидалось.

Я устанавливаю разрешения, которые каждый пользователь может редактировать и запускать файлы.

+4

'passthru ("/path/to/python /some/path/to/track.py ");' – AbraCadaver

+0

Не работает :( – daniel7558

ответ

0

Это похоже на ситуацию, когда пользователь веб-сервера не может прочитать файл, о котором идет речь.

К сожалению, passthru() просто возвращает NULL, если команда не удалась, вместо того, чтобы выбрасывать исключение. Например, даже такая нонсенс, как var_dump(passthru('foobar'));, возвращает NULL.

Как вы можете это решить? Вы можете проверить из командной строки, если веб-сервер сможет выполнить команду (предполагается www-data это ваш веб-сервер пользователя, и у вас есть привилегии SUDO):

sudo su - www-data -c 'python track.py' 

Таким образом, вы получите сообщение об ошибке значимое и может решить проблему.

+0

Пользователь веб-сервера - это демон (просто установил xampp для запуска и запуска) Когда я выполняю команду, которую вы мне дали, я получаю сообщение об ошибке «Эта учетная запись в настоящее время недоступна». После этого я отключил xampp, поскольку я думал, что он может блокироваться, но та же ошибка повторяется снова и снова. – daniel7558

+0

Это обычно означает, что у пользователя-демона нет реальной оболочки, но вместо этого что-то вроде '/ bin/false' или'/usr/sbin/nologin'. Вы можете проверить с помощью 'grep^daemon/etc/passwd' (последний столбец). установите другую оболочку, например bash, запустите 'sudo usermod -s/bin/bash daemon' и попробуйте вышеуказанные вещи снова. (Примечание. С точки зрения безопасности имеет смысл запретить интерактивные оболочки для пользователей-демонов, но если вы хотите используйте 'passthru', вы должны это сделать.) Кстати, вы не Для этого вам нужно закрыть XAMPP. – lxg

+0

Спасибо. Теперь он запускает скрипт python, но я получил странную ошибку. '/usr/lib/python2.7/dist-packages/IPython/utils/path.py:304: UserWarning: родительский IP-адрес/usr/sbin 'не является доступным для записи местоположением, используя временную директорию. 'Я не уверен, должен ли я открыть новый поток, потому что он похож на проблему разрешения. Может быть, вы тоже можете мне помочь :) – daniel7558

Смежные вопросы