#python #cgi
#python #cgi
Вопрос:
#! /usr/bin/env python
import htmlSplitter, htmlGlue
headerContent, mainContent, sideSetup, sideContent, footerContent = htmlSplitter.split("../htdocs/bcc/register.html")
mainContent = "<h1>This is another Test</h1>"
sideContent = "<h2>Jonathan's here!</h2>"
htmlDoc = htmlGlue.glue(headerContent, mainContent, sideSetup, sideContent, footerContent)
f = open("../bcc/doctest.html", "w")
f.write(htmlDoc)
f.close()
print("Location:../bcc/doctest.html")
print
этот скрипт отлично работает, когда я запускаю его из командной строки. Однако, когда я запускаю его как CGI-скрипт, он выдает ошибку «преждевременное завершение заголовков скрипта». Я отладил, и ничего страшного, если я закомментирую сегмент, который открывается и записывает «doctest.html » (поэтому я знаю, что два других модуля, которые я включил, не вызывают проблемы). Есть идеи, почему эта часть кода не работает как CGI-скрипт? Есть ли что-то, что я должен заменить вместо этого?
ПРИМЕЧАНИЕ: Я выполнил chmod a rw на ‘doctest.html ‘ чтобы убедиться, что у скрипта есть разрешения на редактирование.
Спасибо!
Комментарии:
1. Вы можете использовать
cgitb
, чтобы узнать, что происходит.import cgitb; if DEBUG: cgitb.enable()
2. понял. я уверен, что это полезный инструмент, о котором мне, вероятно, следовало знать. Спасибо!
3. У меня была неправильная реляционная ссылка. Работа с несколькими сайтами с одного сервера apache и cgi-bin иногда приводит меня в замешательство, поскольку я знаю, что отношения будут другими, как только я загружу их на сервер моей компании.
4. Пожалуйста, опубликуйте решение в качестве ответа, чтобы остальные из нас могли учиться.
Ответ №1:
Добавьте следующее в начало вашего скрипта:
#!/usr/bin/env python
print 'Content-Type: text/html'
print
Я всегда объявлял Content-Type
в своих cgi-скриптах на python, это вежливо.
import cgi
import cgitb
cgitb.enable() # allows error tracebacks
cgitb
покажет вам хорошую обратную трассировку на веб-основе, если что-то пошло не так с вашим скриптом, например, возникли какие-либо исключения.
Комментарии:
1. cgitb помог; у меня возникла ошибка реляционной ссылки. Как ни странно, имя файла open() не совпадает с путем перенаправления (Location:) имени файла, что я нахожу странным. Я ценю помощь!
Ответ №2:
Может быть, просто ошибка копирования / вставки, но ваш shebang, похоже, имеет отступ. отмените его и попробуйте запустить скрипт через командную строку на сервере, используя ./yourscript
(не python yourscript
, поскольку именно так он, вероятно, выполняется веб-сервером)