我编写了一个API,用户可以将sql查询的输出定向到:
1> Excel(ExcelOut类)
2 - ; CSV(CSVOut类)
3 GT;标准输出(StdOut类)
对于前两种输出类型,我希望用户为我提供一个文件位置,然后API检查该位置是否存在a.k.a参数验证
对于标准输出,我想知道是否需要验证?即是否有任何情况下API的用户(开发人员)在代码运行时不知道sys.stdout不可用" ?
答案 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设置为:
EBADF (Bad file descriptor)
EIO (Input/output error)
ENOSPC (No space left on device)
EPIPE (Broken pipe)
前几次写入调用将成功,然后{4}就像在#4中一样(换句话说,工作一次并不意味着总是工作)。
在开始写入之前尝试确定stdout是否有效是很有用的(基本检查可以使用例如EPIPE
完成)。大多数程序应该假设它可用,并优雅地处理故障。