【发布时间】:2015-12-09 21:20:25
【问题描述】:
当使用无效参数将 Python 脚本的输出传送到 wc 时,我遇到了一些(对我而言)奇怪的行为。
λ python test.py
Hello!
λ python test.py | wc -li
wc: unknown option -- i
Try 'wc --help' for more information.
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp1252'>
OSError: [Errno 22] Invalid argument
这里发生了什么?
我的配置是
- Windows 10
- 指挥官
- msysgit 2.5.1.windows.1
【问题讨论】:
-
@achampion 对,它没有选项。这就是Python中发生错误的原因。我想知道这个
OSError到底发生了什么,以及为什么它与传递给wc的无效参数有关。 -
wc在看到关闭管道的无效选项时退出,python 继续写入管道并失败。幸运的是,对于同一异常 (Mac OSX),我收到了更合理的错误消息:BrokenPipeError: [Errno 32] Broken pipe。 -
不要把
EINVAL的意义放在股票上。 CRT 必须将数千个 Win32 错误代码映射到大约 40 个errno值。这里的 Win32 错误可能是ERROR_NO_DATA,因为管道正在关闭。原则上我认为这应该映射到EPIPE(断管),但由于某种原因,CRT 使用默认值EINVAL(无效参数)。