Python:os.read() 在 fd 上阻塞

标签 python linux

如果fd是bash shell,如何避免行缓冲问题?

最佳答案

这似乎有效:

#!/usr/local/cpython-3.3/bin/python

import os
import pty
#mport sys
import fcntl

OFLAGS = None

def set_nonblocking(file_handle):
    """Make a file_handle non-blocking."""
    global OFLAGS
    OFLAGS = fcntl.fcntl(file_handle, fcntl.F_GETFL)
    nflags = OFLAGS | os.O_NONBLOCK
    fcntl.fcntl(file_handle, fcntl.F_SETFL, nflags)


def main():
    (pid, file_handle) = pty.fork()
    if pid == 0:
        # we're in the child
        os.execl('/bin/sh', '/bin/sh', '-i')
    else:
        #file_handle = os.open('/dev/null', os.O_RDONLY)
        set_nonblocking(file_handle)
        while True:
            try:
                # return 1-n bytes or exception if no bytes
                data = os.read(file_handle, 1024)
            except BlockingIOError:
                #sys.stdout.write('no data read\r')
                pass
            else:
                print(len(data), data)

main()

有时,处理非阻塞 I/O 的方法是使用线程或子进程,顺便说一句。然后一个线程或子进程可以阻塞,而其他线程或子进程则可以愉快地工作。

HTH

关于Python:os.read() 在 fd 上阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20457648/

相关文章:

Python:使用键的元组中最多包含 2 个或更多元素的列表

python - 从 Pandas 数据框中绘制堆积条形图

linux - shell 脚本中未捕获输出

linux - SVN 需要使用预提交 Hook 进行锁定检查

python - 二维 numpy 数组的映射函数

python - 在单独的行中打印段落中的多个句子

python - Django 是否有计划原生处理 NoSQL 数据库?

Python:试图将文件夹的内容放入文本文件中:

Linux 内核初始化在加密文件系统中失败

c - unix中nice和setpriority的区别