Выполните скрипт на Python, хранящийся на веб-сервере, используя красивый суп - PullRequest
0 голосов
/ 22 февраля 2011

Я пытаюсь создать простую комбинацию формы / скрипта, которая позволит кому-то заменить содержимое определенного div в html-файле текстом, который они вводят в html-форме на отдельной странице.

Скрипт работает нормально, если все локально: скрипт локальный, я устанавливаю рабочий каталог, где находится мой html-файл, и сам передаю параметр при запуске скрипта. Однако, когда я загружаю все на свой сервер сайта, он выдает ошибку 500.

Мне удалось выполнить простой скрипт на python, который я сохранил на своем сайте, и JustHost, мой хостинг, сообщил мне, что BeuatifulSoup был добавлен на мой сервер.

Вот скрипт, с параметром "textcontent" из HTML-формы, который работает нормально. Мой scirpt коренится в public_html / cgi-bin /, а html, который я пытаюсь читать и писать, находится в корне public_html. Я предполагаю, что либо HTML-файл не найден, либо Beautifulsoup на самом деле не доступен на моем сервере ... в любом случае способ проверить это?

#!/usr/bin/python
#import beautifulsoup
from BeautifulSoup import BeautifulSoup
# Import modules for CGI handling 
import cgi, cgitb, traceback


# Create instance of FieldStorage 
try:
    form = cgi.FieldStorage()    
    def text_replace(word):
    f = open('/public_html/souptest2.html', 'r')
    soup = BeautifulSoup(f.read())
    f.close()

    text = soup.find('div', attrs={'id': 'sampletext'}).string
    text.replaceWith(word)

    deploy_html = open('/public_html/souptest2.html', 'w')
    deploy_html.write(str(soup))
    deploy_html.close()

# Get data from fields
    if form.getvalue('textcontent'):
        text_content = form.getvalue('textcontent')
        text_replace(text_content)
    else:
        text_content = "Not entered"
except:
    deploy_html = open('../souptest2.html', 'w')
    traceback.print_exc(deploy_html)
    deploy_html.close() 

Я пытался загрузить его как скрипт и запустить его с URL-адреса, но все равно получаю ошибку 500, без вывода на мою страницу вывода для отладки с использованием traceback ...

Ответы [ 2 ]

0 голосов
/ 23 февраля 2011

Для проверки сделайте что-то вроде:

try:
  from BeautifulSoup import BeautifulSoup
except Exception, e:
  print "An error occured importing soup", e

Вам нужно исправить вывод, чтобы вы его увидели, или записать что-то в файл.

0 голосов
/ 22 февраля 2011

У вас есть учетная запись оболочки на вашем хосте?Если это так, попробуйте запустить серверную версию Python в интерактивном режиме и введите:

>>> import BeautifulSoup

Если модуль не существует, вы должны получить ImportError.

В качестве альтернативы, попробуйтепоставить cgitb.enable() сразу после строки import cgi, cgitb.Это должно дать вам трассировку любых возникших исключений.Если это все еще не работает, вероятно, ваш веб-сервер не находит сценарий.Дважды проверьте свою конфигурацию у своего хостинг-провайдера.

Существует целый ряд советов о том, как отлаживать CGI-скрипты, в документации CGI Python, найденных здесь .

РЕДАКТИРОВАТЬ : отредактировано таким образом, чтобы использовать модуль cgitb вместо того, чтобы пытаться вручную обработать решение, используя traceback.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...