Python - stdout总是"可用"?

时间:2014-10-08 21:01:16

标签: python linux io

我编写了一个API,用户可以将sql查询的输出定向到:

1> Excel(ExcelOut类)
2 - ; CSV(CSVOut类)
3 GT;标准输出(StdOut类)

对于前两种输出类型,我希望用户为我提供一个文件位置,然后API检查该位置是否存在a.k.a参数验证
对于标准输出,我想知道是否需要验证?即是否有任何情况下API的用户(开发人员)在代码运行时不知道sys.stdout不可用"

1 个答案:

答案 0 :(得分:3)

stdout无法写入的原因有很多。以下是一些例子:

# 1. Run with stdout explicitly closed:
$ ./yourscript >&- 

# 2. Run in the background and then closing the terminal
$ ./yourscript & exit

# 3. No space on the device (/dev/full simulates this for testing):
$ ./yourscript > /dev/full

# 4. Run with a pipe that closes immediately:
$ ./yourscript | true

# 5. Run with a pipe that closes after the first 10 lines:
$ ./yourscript | head -n 10

在写入时,每个错误都包含在Python IOError中,Errno设置为:

  1. EBADF (Bad file descriptor)

  2. EIO (Input/output error)

  3. ENOSPC (No space left on device)

  4. EPIPE (Broken pipe)

  5. 前几次写入调用将成功,然后{4}就像在#4中一样(换句话说,工作一次并不意味着总是工作)。

  6. 在开始写入之前尝试确定stdout是否有效是很有用的(基本检查可以使用例如EPIPE完成)。大多数程序应该假设它可用,并优雅地处理故障。