【发布时间】:2011-08-02 17:29:29
【问题描述】:
如何检查给定的文件描述符是否有效?如果有空,我想写信给fd=3;否则,我想写入标准输出。我知道我可以用 try-except 语句包装每个 os.write 调用,但我想提前知道 fd=3 是否可写。
【问题讨论】:
标签: python python-2.6 file-descriptor
如何检查给定的文件描述符是否有效?如果有空,我想写信给fd=3;否则,我想写入标准输出。我知道我可以用 try-except 语句包装每个 os.write 调用,但我想提前知道 fd=3 是否可写。
【问题讨论】:
标签: python python-2.6 file-descriptor
您可以在每次写入之前使用os.fstat 来确定文件描述符是否有效,但无论如何您都需要将其包装在try/except 中,因为无效的文件描述符会引发OSError。最好只使用 try/except 创建自己的 write 函数。
def write(data, fd=3):
try:
os.write(fd, data)
except OSError:
sys.stdout.write(data)
【讨论】:
尝试在开始时将os.write 更改为fd=3 一次(在try-except 块内),然后根据其成功更改所有后续行为?
这样您就不必将每个调用都包含在try-except 中。当然,如果fd=3 在您的问题中间停止有效(例如,如果它是从另一端关闭的管道),这将崩溃。
【讨论】:
os.fstat 并检查模式位而不是 os.write,以避免将垃圾写入 fd 的副作用,但除此之外,try/except 是完美的习惯用法对于这个问题。 “最好请求宽恕等”
os.fstat 会检测到破损的管道吗?
ValueError