我创建了一个bash脚本,它根据特定条件管理多个相关的Python脚本(即,当文件行数< x时运行此脚本,如果...则运行不同的脚本,等等)。我使用入口点在bash脚本中执行这些python脚本。
在验证bash脚本时,我发现了一些边缘情况,其中所有条件都失败,导致sys.exit(load_entry_point('Program', 'console_scripts', 'iter')())
和ValueError: Nothing was generated
(在python程序中指定,如果没有发生任何情况,将引发)。
在看了SO之后,我在一些条件句中尝试了这样的东西:
if [ $? -ne 0 ];
then
echo "exit 1"
fi
echo "EXIT 0"
字符串
我继续得到EXIT 0
,表明没有检测到错误。我不明白的是?
为了清楚起见,我的目标是检测被调用的python脚本抛出的任何错误,以使bash脚本做出相应的响应。
下面是bash脚本的一个想法:
Iter=1
while [ $nr_lines -lt 17 ]; do
if [ $Iter -eq 5 ]; then
echo ''
echo 'Relax parameter. Iteration:' $Iter
relax -i $Iter -o ./dir
nr_lines=$(wc -l < ./dir/output$Iter.csv)
let Iter++
else
echo ''
echo 'Iteration:' $Iter
iter -i $Iter -o ./dir
nr_lines=$(wc -l < ./dir/output$Iter.csv)
let Iter++
fi
done
型
我试着把错误捕获的条件放在这里:
Iter=1
while [ $nr_lines -lt 17 ]; do
if [ $Iter -eq 5 ]; then
echo ''
echo 'Relax parameter. Iteration:' $Iter
relax -i $Iter -o ./dir
nr_lines=$(wc -l < ./dir/output$Iter.csv)
let Iter++
else
echo ''
echo 'Iteration:' $Iter
iter -i $Iter -o ./dir
nr_lines=$(wc -l < ./dir/output$Iter.csv)
let Iter++
fi
if [ $? -ne 0 ];
then
echo "exit 1"
fi
echo "EXIT 0"
done
型
这里:
Iter=1
while [ $nr_lines -lt 17 ]; do
if [ $Iter -eq 5 ]; then
echo ''
echo 'Relax parameter. Iteration:' $Iter
relax -i $Iter -o ./dir
nr_lines=$(wc -l < ./dir/output$Iter.csv)
let Iter++
else
echo ''
echo 'Iteration:' $Iter
iter -i $Iter -o ./dir
nr_lines=$(wc -l < ./dir/output$Iter.csv)
let Iter++
fi
done
if [ $? -ne 0 ];
then
echo "exit 1"
fi
echo "EXIT 0"
型
并且都返回EXIT 0
,表明没有发生错误。
1条答案
按热度按时间jdgnovmf1#
变更
字符串
至
型
这直接测试
iter
运行的python脚本的退出状态。如果它以非零状态退出,则打印消息并跳出while
循环。您可以对
relax
执行类似的操作。