【问题标题】:Check if file descriptor is valid检查文件描述符是否有效
【发布时间】:2011-08-02 17:29:29
【问题描述】:

如何检查给定的文件描述符是否有效?如果有空,我想写信给fd=3;否则,我想写入标准输出。我知道我可以用 try-except 语句包装每个 os.write 调用,但我想提前知道 fd=3 是否可写。

【问题讨论】:

    标签: python python-2.6 file-descriptor


    【解决方案1】:

    您可以在每次写入之前使用os.fstat 来确定文件描述符是否有效,但无论如何您都需要将其包装在try/except 中,因为无效的文件描述符会引发OSError。最好只使用 try/except 创建自己的 write 函数。

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

    【讨论】:

      【解决方案2】:

      尝试在开始时将os.write 更改为fd=3 一次(在try-except 块内),然后根据其成功更改所有后续行为?

      这样您就不必将每个调用都包含在try-except 中。当然,如果fd=3 在您的问题中间停止有效(例如,如果它是从另一端关闭的管道),这将崩溃。

      【讨论】:

      • 我会尝试调用 os.fstat 并检查模式位而不是 os.write,以避免将垃圾写入 fd 的副作用,但除此之外,try/except 是完美的习惯用法对于这个问题。 “最好请求宽恕等”
      • @Chris Farmiloe:os.fstat 会检测到破损的管道吗?
      • 是的,我相信会引发“对已关闭文件的操作”ValueError
      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 2010-10-27
      • 1970-01-01
      • 2012-09-02
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      相关资源
      最近更新 更多