检查文件描述符是否有效

13 投票
2 回答
11083 浏览
提问于 2025-04-16 22:44

我怎么检查一个文件描述符是否有效呢?我想在fd=3可用的时候写入数据;如果不可用,我就想写入标准输出(stdout)。我知道我可以在每次调用os.write的时候用try-except语句来处理错误,但我想提前知道fd=3是否可以写入。

2 个回答

3

你可以试着在一开始用 os.write 写入 fd=3,把这个放在一个 try-except 块里,然后根据这个操作是否成功来决定后面的行为。

这样的话,你就不需要在每次调用的时候都用 try-except 来包裹了。当然,如果在你处理的过程中 fd=3 突然不再有效了(比如说某个管道被另一端关闭了),那这个方法就会失效。

9

你可以使用 os.fstat 来检查文件描述符是否有效,这样在每次写入之前都能确认一下。不过,即使这样做,你还是需要用 try/except 来处理,因为无效的文件描述符会引发一个 OSError 错误。其实,自己写一个带有 try/except 的写入函数可能会更好。

def write(data, fd=3):
    try:
        os.write(fd, data)
    except OSError:
        sys.stdout.write(data)

撰写回答