簡體   English   中英

如何從龍卷風的IOStream中讀取單個按鍵

[英]How to read a single keypress from Tornado's IOStream

我有一個簡單的龍卷風應用程序,可以從telnet客戶端讀取數據。 我正在使用基於TCPServer的處理程序來處理telnet會話(簡化的代碼示例)。

class CliServer(TCPServer, LoggerMixin):
  def __init__(self):
    super(CliServer, self).__init__()

  def handle_stream(self, stream, address):
    #Some irrelevant code
    self.stream.read_bytes(max_buffsize, callback=self._on_read, streaming_callback=None, partial=True)

  def _on_read(self, data)
    #process data
    pass

該處理程序已在主IOLoop中注冊:

my_fd = self.create_socket(self.options.port, self.options.host)
server = CliServer(self.options.current_scope)
server.add_socket(socket.fromfd(my_fd,
                                socket.AF_INET,
                                socket.SOCK_STREAM))

我想從套接字讀取數據后立即接收。 這部分數據將由“ CliServer._on_read回調”處理。

我當前實現的問題是方法BaseIOStream.read_bytes一旦以“ \\ r \\ n”終止,便為我提供了數據,這對我來說太晚了。 例如,當遠程登錄用戶鍵入“ ab \\ tc \\ n”時,_on_read回調將使用“ ab \\ tc”數據調用一次,而不是使用每個字符(“ a”,“ b”,“ \\ t” ', 'C')。

我究竟做錯了什么?

telnet客戶端默認為行緩沖模式,因此在用戶按下Enter之前它不會發送任何內容。 您可以使用telnet選項來更改此模式: 通過telnet發送數據,而無需按Enter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM