我正在尝试使用Python 3.7中的sys.stdin
和sys.stdout
流来查找有关低级I / O的一些信息,但是我的Google-fu失败了。
基本上,我有一个交互式应用程序,我想从控制台读取原始字节(即sys.stdin
),而不回显已键入的内容,直到将其写回到sys.stdout
。我的第一次尝试是进行以下操作,但它会回显正在键入的内容,并且直到我发送EOF为止,输出才会显示。
while True:
read_bytes = sys.stdin.buffer.read()
# do something with the bytes before echo
sys.stdout.buffer.write(read_bytes)
sys.stdout.buffer.flush()
我发现以下代码片段似乎可以禁用终端回显,但是我仍然需要读取字节而不必发送EOF。
def enable_echo(fd, enabled):
(iflag, oflag, cflag, lflag, ispeed, ospeed, cc) = termios.tcgetattr(fd)
if enabled:
lflag |= termios.ECHO
else:
lflag &= ~termios.ECHO
new_attr = [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
termios.tcsetattr(fd, termios.TCSANOW, new_attr)
我是否在想怎么做?感觉好像缺少了一些明显的东西,或者也许已经有一个Python模块为我完成了此任务。并非严格要求使用原始的sys.stdin
和sys.stdout
,但能够切换I / O流(即文件)会很好。