2015-04-28 10 views
3

У меня есть питон скрипт, который необходим для запуска с помощью PHP:Запуск кода питона с PHP

 <?php 
    $command = escapeshellcmd('/home/Desktop/test.py'); 
    $output = shell_exec($command); 
    echo $output; 

    ?> 

из положить сценарий питона двоичный файл, но я получаю следующее сообщение об ошибке в журнале : Невозможно получить доступ к X Display, установлен ли $ DISPLAY правильно?

PHP-код отлично работает с терминалом, но мне не повезло, когда я пытаюсь запустить его из браузера. Любая идея, что происходит? В идеале я не хочу менять свою программу. Я хочу знать, как вы можете исправить ошибку X Display. Есть ли способ проверить правильность установки $ DISPLAY? (Я работаю с Ubuntu)

Я пробовал это: pidof X & & echo «yup X server is running» на моем терминале, и он говорит, что сервер yup x работает!

+1

Похоже, что '$ DISPLAY' не установлен. Почему вы пытаетесь запустить графическое приложение с веб-сервера? – mario

+0

'echo' выводит строки, si' shell_exec' должен возвращать строку. Я думаю, что вам нужно изменить свой скрипт [tag: python], чтобы возвращать только строку, и он не должен использовать какой-либо графический интерфейс. – SaidbakR

+0

Ваше приложение использует что-то, что использует X-сервер. У пользователя терминала, вероятно, есть сервер X, поэтому он работает. У работающего пользователя PHP не работает X-сервер, поэтому он не работает. Мое предложение состояло в том, чтобы изменить сценарий, чтобы не использовать какие-либо методы, требующие X, или запустить X и каким-то образом получить к нему доступ. – Varis

ответ

0

Возможно, для файла python необходимо открыть окно для запуска. Вы говорите, что видели, что он работает в терминале? Что такое test.py? Это умилостивление? Если вы пытаетесь использовать это в качестве команды в вашем PHP: (не 100%, что побег оболочки не лишит это так, возможно, потребуется Закомментируйте)

python -c \'print \"Test\"\' 

и посмотреть, если вы получите выходной текст обратно , Если это проблема python, а не PHP, и файл test.py может создавать экземпляр того, что требует набор $ DISPLAY var. PHP не устанавливает $ DISPLAY var, так как это команды оболочки, а не GUI.

+0

Извините, я не понимаю, что вы имеете в виду, спросив: «Это умилостивление?» .. программа считывает данные из приемника. – Jack

-1

попробовать popen

$command = "/usr/bin/python /home/Desktop/test.py"; 
$handle = popen($command, "r"); 

"г" для чтения

$read = fread($handle, 10); 

10 является размер вывода вы хотите принять,

echo $read ; 

надеюсь, что это помогает,

+0

Это не решит проблему. (На самом деле, он вообще не работает, потому что в пути к python отсутствует косая черта.) – duskwuff

+0

извините, что это была ошибка опечатки, – jazzz

1

Добавить следующий текст в первой строке вашего скрипта Python:

#!/usr/bin/python 

Без этого ядро ​​не знает, что интерпретатор для запуска сценария с, и может в конечном итоге пытается запустить его с помощью /usr/bin/import (потому что это слово, вероятно, появится на первая строка скрипта). Утилита import требует доступа к дисплею X11 (в основном это утилита для скриншотов), поэтому вы получаете эту ошибку.

+0

А что, если сервер Windows? – SaidbakR

+1

@ sємsєм Если они используют что-то вроде Cygwin, это сработает! Если нет, нам нужно будет узнать намного больше об их конфигурации. – duskwuff

+0

Это моя первая строка скрипта python: #!/Usr/bin/env python, поэтому я должен изменить его на #!/Usr/bin/python? – Jack

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