这是我所遇到问题的最小可能示例:
Python脚本:
#!/usr/bin/env python3
import sys
import os
import fileinput
# I
line = sys.stdin.readline()
while line:
exit(0)
line = sys.stdin.readline()
# II
for line in fileinput.input():
exit(0)
pass
# III
stdin_input_iter = enumerate(sys.stdin)
try:
next(stdin_input_iter)
exit(0)
except StopIteration:
exit(0)
Shell脚本:
set -o pipefail
yes | ./test.py ; echo $?
运行此shell脚本的结果:
141
Python脚本中的所有版本:I
,II
和III
都会导致退出代码141
,而我希望它们仅以{{ 1}}。
直觉上我了解到0
仍在写入Python的stdin时,我的Python脚本想要exit(0)
,并且由于yes
强制执行的行为,这导致{{1 }}退出代码。
到目前为止,我找到的唯一解决此问题的方法是继续读取标准输入,直到输入用尽,但是我想知道我的Python脚本是否还有其他解决方法可以防止退出代码{{1} }。
答案 0 :(得分:1)
{ yes || :; } | ./test.py
或
./test.py < <(yes)
...将忽略yes
的任何退出状态,反映出它无法写入标准输出。