Python中的低级流I / O

时间:2019-05-28 12:38:55

标签: python python-3.x io

我正在尝试使用Python 3.7中的sys.stdinsys.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.stdinsys.stdout,但能够切换I / O流(即文件)会很好。

0 个答案:

没有答案