Как выполнить cgi-скрипт python под Linux

#python #linux #cgi

#python #linux #cgi

Вопрос:

У меня есть cgi-скрипт на python, который отлично выполнялся на компьютере с Windows, просто запустив CGIHTTPServer в консоли, открыв html-страницу для передачи данных скрипту и отправки данных.
Теперь мне нужно сделать это под Linux, но это оказывается сложнее. Некоторые веб-поисковики выдали этот скрипт для запуска сервера (я ввел 8000, поскольку исходные 80 не работали)

  import os  
 import BaseHTTPServer, CGIHTTPServer  
 serverAddr = ("", 8000)  
 os.chdir("/home/apannife/www")  
 serv = BaseHTTPServer.HTTPServer(   
     serverAddr, CGIHTTPServer.CGIHTTPRequestHandler)  
 serv.serve_forever()  
  

html.

 <HTML><HEAD><TITLE>

Test

</TITLE>

</HEAD>

<BODY>

<B>  Filename </B>

<FORM METHOD=post ACTION="cgi-bin/docking_cgi.py" ENCTYPE="multipart/form-data">

<INPUT Type="file" NAME="upfile" SIZE=45><BR>

<P><INPUT TYPE=submit></FORM>



</BODY></HTML>
  

и первая часть cgi.

 #!/usr/bin/env python

import cgi

from cgi import FieldStorage


reshtml = '''Content-Type: text/htmln

<HTML><HEAD><TITLE>

DEMO

</TITLE></HEAD>

<BODY><H3> OUTPUT SENT TO %s %s </H3>

</BODY></HTML>'''
form = cgi.FieldStorage()

upfile = form['upfile']
  

Однако отправка данных просто возвращает текст cgi-скрипта и не запускает его. Я модифицировал 775 все, что было в поле зрения, и похоже, что сервер автоматически не понимает, что я хочу, чтобы он выполнил скрипт. Как мне заставить это сделать?
Спасибо.

Комментарии:

1. попробуйте chmod 755 в cgi-bin и во всем остальном; на моем сервере пермь групповой записи в каталоге запрещает выполнение.

2. для него установлено значение drwxr-xr-x, поэтому он должен работать

Ответ №1:

Сервер выполняет скрипты только в каталогах /cgi-bin и /htbin относительно корневого каталога сервера. В отличие от Windows, в Linux эти имена чувствительны к регистру.

Комментарии:

1. У меня есть HTML-файл в /home / apannife / www, поскольку именно там os.chdir устанавливает значение по умолчанию перед запуском сервера. Я создал каталог cgi-bin под ним со скриптом Python в нем. Это первая попытка на сервере Linux, поэтому я мог бы сделать что-то действительно наивное. Я просто открываю HTML-файл в Firefox и ожидаю, что он заработает в данный момент.

2. Итак, ‘www’ — это символическая ссылка на ‘public_html’; а путь к коду python — /home/apannife/public_html/cgi-bin/the-python-code, верно? И в файле python установлен исполняемый бит, например 0755. Если это так, то разрешения кажутся хорошими.

3. Нет, www — это обычный каталог, в котором cgi-bin является подкаталогом www. И все файлы и каталоги, содержащие их, имеют значение 755 (не знаю, какое начальное значение «0» в 0755).

4. @Alan: Я попробовал ваш код на своей машине, и он отлично работает. Я предлагаю отладить вашу проблему: 1. Скопируйте CGIHTTPServer.py в тот же каталог, что и ваш серверный скрипт. 2. Добавьте некоторые выходные данные отладки на CGIHTTPRequestHandler.is_cgi() 3. Запустите свой сервер, получите доступ к своему CGI-скрипту и просмотрите выходные данные отладки.

5. Хорошо, я попробую это. В настоящее время у меня есть serve.py в каталоге www и запустить его из командной строки в терминале как python server.py . Затем я открываю HTML-файл в Firefox просто с помощью «Файл-> открыть файл», вводя данные и ожидая их запуска. В html-коде мне пришлось убрать начальную букву «/» из команды ACTION, которую я использовал в Windows, чтобы заставить ее видеть файл в cgi-bin и задаваться вопросом, вызывает ли это проблемы.