如何在循环中一个接一个地运行python脚本序列?

时间:2018-01-11 09:44:22

标签: python bash cron

如何逐个顺序运行20 - 30个脚本并在执行最后一个脚本之后 - 再次运行第一个脚本并按小时运行此迭代?

我尝试使用crontab来实现它,但这是一种笨重的方式。我想保证每个时刻只运行一个脚本。每个脚本的执行时间约为1分钟。

我为这样的目标编写了一个bash脚本,并考虑使用cron每小时运行它:

if ps ax | grep $0 | grep -v $$ | grep bash | grep -v grep
then
    echo "The script is already running."
    exit 1
else
    python script1.py
    python script2.py
    python script3.py
    ...
    python script30.py
fi

但这是一个好方法吗?

5 个答案:

答案 0 :(得分:2)

对@twaxter 的更正:

import subprocess

program_list = ['script1.py', 'script2.py']

for program in program_list:
    subprocess.call(['python', program])
    print("Finished:" + program)

答案 1 :(得分:1)

您可以使用for循环:

scripts = "script1.py script2.py script3.py"
for s in $scripts
do
    python $s
done

答案 2 :(得分:1)

根据这个问题,我假设您只希望在较旧的程序完成后才运行下一个程序。

我建议使用subprocess.call,它仅在被调用的程序完成执行后才返回到函数的调用。

这是一个例子。当script1完成后,它将运行script1,然后运行script2。

import subprocess

program_list = ['script1.py', 'script2.py']

for program in program_list:
    subprocess.call(['python', 'program'])
    print("Finished:" + program)

答案 3 :(得分:0)

您还可以使用exec命令:

program_list = ["script1.py", "script2.py"]

for program in program_list:
    exec(open(program).read())
    print("\nFinished: " + program)

答案 4 :(得分:0)

如果您的文件与 glob 模式匹配

console.log(this)