0

私はPythonにまったく慣れていませんが、修正する必要のあるコードがあります。これは、Sublime Text 2用のSublimeXdebugプラグインからのものです。これは、SublimeTextを使用したPHPデバッグ用の唯一のプラグインです。プラグインはPythonで記述されており、より具体的にはPython 2.6以前で記述されていますが、プラグインが実行されるシステム(Ubuntu 12.04)はPython>=2.7のみをサポートします。print sys.versionただし、プラグイン/ Sublime Textの開発者は、プラグインのコードに挿入すると報告されるため、どういうわけかPython2.6を「エミュレート」できたようPython 2.6.6です。それは他のいくつかのプラグインを助けたかもしれませんが、SublimeXdebugは助けませんでした:

Traceback (most recent call last):
  File ".\threading.py", line 532, in __bootstrap_inner
  File ".\threading.py", line 484, in run
  File "./Xdebug.py", line 321, in thread_callback
    protocol.accept()
  File "./Xdebug.py", line 137, in accept
    raise(ProtocolConnectionException, x)
ProtocolConnectionException

問題のあるコード(おそらく1つだけではない)は次のようになります。

def accept(self):
    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    if serv:
        try:
            serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            serv.settimeout(1)
            serv.bind(('', self.port))
            serv.listen(1)
            self.listening = True
            self.sock = None
        except Exception, x:
            raise(ProtocolConnectionException, x) # line 137 <------------

        while self.listening:
            try:
                self.sock, address = serv.accept()
                self.listening = False
            except socket.timeout:
                pass

        if self.sock:
            self.connected = True
            self.sock.settimeout(None)
        else:
            self.connected = False
            self.listening = False

        try:
            serv.close()
            serv = None
        except:
            pass
        return self.sock
    else:
        raise ProtocolConnectionException('Could not create socket')

(2.6バージョンのPythonを.debにダウンロードし、解凍してからに移動することをお勧めする人のためusr/lib/python2.6{sublime text folder}/lib、私はすでに試しましたが、役に立ちませんでした。)

では、問題の根本はPythonのバージョンの不一致などにあるのでしょうか?

編集:

行137を次のように変更すると、次のようにraiseなります。

Traceback (most recent call last):
  File ".\threading.py", line 532, in __bootstrap_inner
  File ".\threading.py", line 484, in run
  File "./Xdebug.py", line 321, in thread_callback
  File "./Xdebug.py", line 132, in accept
  File "<string>", line 1, in bind
error: [Errno 98] Address already in use

行132はserv.bind(('', self.port))です。

4

1 に答える 1

2

このPythonバージョンのものは赤いニシンだと思います。何が起こっているのかというと、このコードはTCPポート(何であれ)でリッスンしようとしていself.portますが、他の何かがすでにそこでリッスンしています。Linuxでは、実行して、sudo netstat -anp | grep LISTENそれがどのプロセスであるかを把握できます。

于 2012-12-31T16:19:47.687 に答える