Внутренняя ошибка сервера - Python CGI - PullRequest
1 голос
/ 28 марта 2011

В настоящее время я пишу CGI-скрипт, конечная цель которого - запустить Java-программу и затем перенаправить на другую страницу. Тем не менее, CGI вызывает 500 внутренних ошибок сервера, когда я вызываю попытаться запустить программу Java. Я пробовал os.system ("[command]") и call (["command"]) и subprocess.Popen ("command"), и все три вызывают одну и ту же проблему. Любые предложения приветствуются.

Редактировать Кроме того, журнал apache не дает мне никакой информации о том, что существует только неправильный заголовок.

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

* * 1010

всей команды нет, но я считаю, что она построена правильно, потому что я могу скопировать напечатанную команду и запустить ее в терминале, и она отлично работает. Команда просто java [имя класса] [9 аргументов]

Java-код работает гладко вне кода Python, и все, что он делает, это генерирует файл .png и файл .html, содержащий .png. Имя файла [user_id] .html, следовательно, редирект.

внутренняя ошибка сервера не возникает, если закомментированы только команды процесса.

РЕДАКТИРОВАТЬ Закончил сдаваться и перейти к php для выполнения этого скрипта. Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 28 марта 2011
## This is where the problem exists
#os.system("ls -l")
#call(["ls", "-l"])
#p = subprocess.Popen(command)
## End of Problem
  1. Фокус на subprocess.Popen.Откажитесь от всех остальных.Постоянно.Они все плохие идеи.

  2. Если subprocess.Popen(command) действительно работает как автономный короткий скрипт Python, то вам нужно выяснить, имеет ли имя пользователя Apache CGI-bin необходимые привилегии для его запуска.Помните.Apache не работает как ты.Он запускается как отдельный «человек» с отдельными привилегиями.

  3. Ваша команда java, вероятно, передает данные в sys.stdout и / или sys.stderr.Если так, то этот вывод отправляется в Apache.В идеале некоторые вещи уже поступили в Apache через sys.stdout, который является правильным заголовком и все хорошо.

    Однако из-за того, как все буферизуется, существует небольшая вероятность того, что Apache не видит полезного ответа, а вывод java сбивает с толку.что вы переключаетесь на mod_wsgi вместо CGI, потому что им легче управлять.

    Я бы также предложил записать вывод подпроцесса в файл, а затем скопировать этот файл в sys.stdout, чтобы Apache мог:не быть запутанным Java-подпроцессом.

1 голос
/ 28 марта 2011

Вы пробовали:

import cgitb

cgitb.enable()

, чтобы получить более значимую ошибку - сообщение об ошибке Python в вашем браузере

или

запуск вашего скрипта из командной строки на вашем сервере, чтобы увидеть, возвращает ли python ошибку, и если да, то помогает ли она диагностировать проблему?

или

печатать ваш вызов Java как вывод html из вашего скрипта python?

...