我有一个 shell 脚本,它对网络设备上目录中的所有文件执行 whisper,然后将结果记录存储在同一卷上。有时,网络发生问题(卷断开连接),导致结果记录的保存失败。这是典型的此类错误消息:
Traceback (most recent call last):
File "/Users/db/Library/Python/3.11/bin/whisper", line 8, in <module>
sys.exit(cli())
^^^^^
File "/Users/db/Library/Python/3.11/lib/python/site-packages/whisper/transcribe.py", line 413, in cli
os.makedirs(output_dir, exist_ok=True)
File "<frozen os>", line 225, in makedirs
FileNotFoundError: [Errno 2] No such file or directory: '.'
我的脚本的相关部分如下所示:
whisper "$file" --model large >> log
if [[ $? -eq 0 ]]; then
echo "exit success: $?"
echo "*****success****** $?, `uname -n`, $me" >> "${directory}/../${transdir}/${name}.txt"
else
echo "exit error: $?"
echo "*****error****** $?, `uname -n`, $me" >> "${directory}/../${transdir}/${name}.txt"
fi
通常,当脚本成功完成时,它会按预期输入第一个 if ,但即使我收到类似上面的错误消息,它仍然会输入第一个
if
,就好像它成功了一样。这是为什么?
注意:据我所知,写入
log
不是问题。
更新:
% whisper --bad_args; echo $?
whisper: error: the following arguments are required: audio
2
更新2:
#!/opt/local/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11
# -*- coding: utf-8 -*-
import re
import sys
from whisper.transcribe import cli
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(cli())
$?
的波动性很大:在您 echo $?
的那一刻,$?
的值就被 echo
的退出状态取代,不再指 whisper
的退出状态。因此,如果您可能多次需要它,您应该在使用它之前将其存储在变量中。
if whisper "$file" --model large >> log; then
echo "*****success****** $?, `uname -n`, $me" >> "${directory}/../${transdir}/${name}.txt"
else
whisper_rc=$? # <- THIS RIGHT HERE
echo "exit error: $whisper_rc"
echo "*****error****** $whisper_rc, `uname -n`, $me" >> "${directory}/../${transdir}/${name}.txt"
fi