递归读取python文件并在每个文件的输出存在后停止的bash脚本
我有一个bash,它递归读取*.py脚本,当目录(一个*.pkl文件)中存在每个*.py文件的输出时停止。bash的主要思想是,如果输出不存在,python脚本必须再次运行,直到为每个*.py脚本创建输出为止递归读取python文件并在每个文件的输出存在后停止的bash脚本,python,linux,bash,for-loop,recursion,Python,Linux,Bash,For Loop,Recursion,我有一个bash,它递归读取*.py脚本,当目录(一个*.pkl文件)中存在每个*.py文件的输出时停止。bash的主要思想是,如果输出不存在,python脚本必须再次运行,直到为每个*.py脚本创建输出为止 bash.sh model1.py model2.py model3.py model1.pkl # expected output model2.pkl # expected output model3.pkl # expected output 但是,这里有一个问题:当第二个/第三个
bash.sh
model1.py
model2.py
model3.py
model1.pkl # expected output
model2.pkl # expected output
model3.pkl # expected output
但是,这里有一个问题:当第二个/第三个输出不存在时(来自第二个/第三个。*py脚本),bash不会再次运行(而如果第一个输出不存在,bash会再次运行,这是应该的)
我的bash如下所示:
#!/bin/bash
for x in $(find . -type f -name "*.py"); do
if [[ ! -f `basename -s .py $x`.pkl ]]; then #output with the same name of *.py file
python3 ${x}
else
exit 0
fi
done
那么,如果任何*.py脚本的输出丢失,我如何强制bash脚本再次运行呢?还是输出的名称有问题
我尝试在读取和时使用命令,直到
,但脚本读取所有*.py文件失败
提前谢谢 试试这个:不是最好的方法,但至少能帮你朝着正确的方向前进
keep_running(){
for f in $(find . -type f -name "*.py");
do
file_name=$(dirname $f)/$(basename $f .py).pk1
if [ ! -f "$file_name" ];
then
echo "$file_name doesn't exists" # here you can run your python script
fi
done
}
cnt_py=0
cnt_pkl=1
while [ $cnt_pkl -ne $cnt_py ] ; do
keep_running
cnt_py=`ls -1 *.py| wc -l`
cnt_pkl=`ls -1 *.pk1| wc -l`
done
你好@change198,谢谢你的帮助!是的,现在狂欢很好!