#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 и задаваться вопросом, вызывает ли это проблемы.