2011-11-13 9 views
6

私はWeb.pyでWebサイトを作成しようとしていますが、ポート80でソケットを作成することはできませんが、それは他のすべてのポートで動作します。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() 

誰かが助けてくださいことはできますか?

+2

はあなたが別のサービスがポート80でリッスンしているのですか? apacheのように? – Will

+0

"...それは他のすべてのポートで動作します。"本当に? –

+4

ポート81を試しましたか?たぶんアクセス許可エラーです。 Linux(少なくとも)では、そのような低いポートで聴くにはルートにする必要があります。 (おもう)。 –

答えて

12

ポート80で作業している可能性があります。netstat -ln | grep 80コマンドを試してください。

また、telnet localhost 80を試すことができます。接続が拒否された場合は、そのポートをクリアして使用する必要があります。

4

ブラウザで127.0.0.1を参照してください。すでにポート80を使用しているプロセスがあり、そのポートはhttpに使用されているはずなので、おそらくこれを使って何が使用されているのかを確認するのが最も簡単な方法です。

0

私は自分のRaspberryPiで同じ問題に遭遇しました。修正するために、私はコマンドの前にsudoを追加しました。試してみてください:sudoのパイソンは、私が成功した80

sudo python index.py 80 

ポートでこのコマンドを使用してサービスを開始するが、私はサービスを閉鎖するショートカットキー(コントロール+ C)を使用する場合、そこに意志80

+1

サイトEddyへようこそ。あなたの答えは、既に上記の権限に関して重複していますが、あなたが提供したsudoの構文は、「あなたがrootだったかのように実行する」という意味です。 –

6

ををmain.pyエラーである。

^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 

それはそれはあなたがしようとしている事実だろう上記の問題を解決するが、

+0

または "sudo killall -9 python" on raspian ... – 576i

0

をお勧めすることはできませんです特権を持たないユーザとしてweb.pyを起動しますか?

試してみてください。

sudo python ./bin/blah.py 
関連する問題