我正在尝试将其从Ruby转换为Python。 Ruby代码:
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
我的平均问题在于
socket.flush
我找不到做冲洗的方法。还有什么方法可以做到这一点? 我写了这个。 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")
答案 0 :(得分: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)
答案 1 :(得分:0)
我的代码就像流一样。
当然是,因为它是无限循环,除非出现socket.timeout
以外的一些例外。
也许它是红宝石代码的另一部分
必须是......检查调用read_byte
的Ruby循环,并将其与Python while True
进行比较。