0

これをRubyからPythonに翻訳しようとしています。ルビーコード:

def read_byte
    begin
        Timeout.timeout(0.5) do
            b = socket.read 1
        end
    rescue Timeout::Error => e
        socket.write("\n")
        socket.flush
        retry
    end
end

def socket
    @socket ||= TCPSocket.open @host, @port
rescue SocketError
    # TODO: raise a specific error
    raise "Unable to open connection to #{@host} with given parameters"
end

ここでの私の平均的な問題は

ソケットフラッシュ

フラッシュする方法が見つかりません。他にどのような方法でこれを行うことができますか? 私はこれを書きました。Python コード:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((self.host, self.port))
s.settimeout(0.5)
while True:
    try:
        print s.recv(1)
    except socket.timeout:
        s.sendall("\n")
4

2 に答える 2

0

ストリームは私のコードでぶら下がっています。

もちろんそうです、それ以外の例外がsocket.timeout発生しない限り無限ループです。

多分それはルビーコードの別の部分です

である必要があります...read_byteが呼び出される Ruby ループを検査し、それを Python と比較しますwhile True

于 2014-03-27T09:42:15.567 に答える
0

ソケットをフラッシュしても違いが生じるとは思えませんが、最初にファイルのようなオブジェクトを作成してソケットを「フラッシュ」する方法を次に示します。

def flush_socket(s):
    f = s.makefile()
    f.flush()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((self.host, self.port))
s.settimeout(0.5)
while True:
    try:
        print s.recv(1)
    except socket.timeout:
        s.sendall("\n")
        flush_socket(s)
于 2012-06-06T00:02:57.273 に答える