gpt4 book ai didi

python - 使用设置为 "set -o pipefail"的 Python 脚本从 stdin 读取时获取退出代码 141

转载 作者:行者123 更新时间:2023-12-01 06:41:30 26 4
gpt4 key购买 nike

这是我遇到的问题的最小可能示例:

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 脚本中的所有版本:IIIIII 都会导致退出代码 141 而我希望他们简单地使用 0 退出。

直觉上,我明白我的Python脚本想要exit(0),而yes仍在写入Python的标准输入,并且由于set强制执行的行为-o pipelinefail,这会导致 141 退出代码。

到目前为止,我发现解决这个问题的唯一解决方案是继续读取标准输入,直到输入耗尽,但我想知道我的 Python 脚本是否还有其他解决方案来防止退出代码 141 避免发生。

最佳答案

{ yes || :; } | ./test.py

./test.py < <(yes)

...将忽略 yes 的任何退出状态,反射(reflect)其无法写入标准输出。

关于python - 使用设置为 "set -o pipefail"的 Python 脚本从 stdin 读取时获取退出代码 141,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59436858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com