Почему Web.py не позволяет мне запускать сервер на порту 80? - PullRequest
6 голосов
/ 14 ноября 2011

Я пытаюсь создать веб-сайт с помощью Web.py, но он не позволяет мне открыть сокет создания на порту 80, но он работает на любом другом порту.

У меня перенаправлен порт и все такое, так что это не проблема.

python main.py 80

но когда я делаю это, я получаю ошибку:

http://0.0.0.0:80/
Traceback (most recent call last):
  File "main.py", line 43, in <module>
    app.run()
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 311, in run
    return wsgi.runwsgi(self.wsgifunc(*middleware))
  File "/usr/local/lib/python2.7/dist-packages/web/wsgi.py", line 54, in runwsgi
    return httpserver.runsimple(func, validip(listget(sys.argv, 1, '')))
  File "/usr/local/lib/python2.7/dist-packages/web/httpserver.py", line 148, in runsimple
    server.start()
  File "/usr/local/lib/python2.7/dist-packages/web/wsgiserver/__init__.py", line 1753, in start
    raise socket.error(msg)
socket.error: No socket could be created

мой код:

import MySQLdb
import web
import hashlib as h


urls = (

'/', "index", "/register/?", "register", "/login/?", "login", "/thankyou/?", "thankyou"

)

app = web.application(urls, globals())
render = web.template.render("templates/")
db = web.database (dbn="mysql", user="root", pw="461408", db="realmd")

class index():
    def GET(self):
        return render.index()
class register():
    def GET(self):
        return render.register()
    def POST(self):
        i = web.input()
        user = h.sha1(i.username).hexdigest()
        pw = h.sha1(i.password).hexdigest()

        n = db.insert("account", username=user, password=pw)




if __name__ == '__main__':
    app.run()

Может кто-нибудь помочь, пожалуйста?

Ответы [ 5 ]

12 голосов
/ 14 ноября 2011

Возможно, что-то еще работает с портом 80. Попробуйте команду netstat -ln | grep 80, чтобы проверить это.

Кроме того, вы можете попробовать telnet localhost 80, и если в соединении отказано, этот порт должен быть свободен для использования.

6 голосов
/ 18 января 2013

Я успешно запускаю службу с помощью этой команды в порту 80

sudo python index.py 80

но когда я использую сочетание клавиш (control + c), чтобы закрыть службу, произойдет ошибка.

  ^CTraceback (most recent call last):
  File "application.py", line 206, in <module>
    app.run()
  File "/Library/Python/2.7/site-packages/web.py-0.37-py2.7.egg/web/application.py", line 313, in run
    return wsgi.runwsgi(self.wsgifunc(*middleware))
  File "/Library/Python/2.7/site-packages/web.py-0.37-py2.7.egg/web/wsgi.py", line 54, in runwsgi
    return httpserver.runsimple(func, validip(listget(sys.argv, 1, '')))
  File "/Library/Python/2.7/site-packages/web.py-0.37-py2.7.egg/web/httpserver.py", line 159, in runsimple
    server.stop()
  File "/Library/Python/2.7/site-packages/web.py-0.37-py2.7.egg/web/wsgiserver/__init__.py", line 1932, in stop
    self.requests.stop(self.shutdown_timeout)
  File "/Library/Python/2.7/site-packages/web.py-0.37-py2.7.egg/web/wsgiserver/__init__.py", line 1471, in stop
    worker.join(remaining_time)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 680, in join
    self.__block.release()
thread.error: release unlocked lock
^C^CException KeyboardInterrupt in <module 'threading' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.pyc'> ignored

Когда это происходит, я убиваю все процессы Python ...

killall -9 python

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

4 голосов
/ 14 ноября 2011

Посетите 127.0.0.1 в браузере.Вероятно, уже есть процесс, использующий порт 80, и этот порт предполагается использовать для http, так что это, вероятно, самый простой способ узнать, что его использует.

1 голос
/ 30 августа 2013

Может быть, вы пытаетесь запустить web.py как непривилегированный пользователь?

попробовать:

sudo python ./bin/blah.py
1 голос
/ 19 июля 2012

Я столкнулся с той же проблемой на моем RaspberryPi.Чтобы исправить, я просто добавил sudo перед командой.Попробуйте: sudo python main.py 80

...