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

Пав*_*нов 2 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
Run Code Online (Sandbox Code Playgroud)

但这是一个好方法吗?

小智 7

对@twaxter 的更正:

import subprocess

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

for program in program_list:
    subprocess.call(['python', program])
    print("Finished:" + program)
Run Code Online (Sandbox Code Playgroud)

  • 指出原始解决方案在子进程调用中错误地称为“程序”可能会有所帮助,这将导致传递字符串,而不是列表项的值。 (2认同)

小智 6

从这个问题,我假设您只想在旧程序完成后运行下一个程序。

我建议使用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)
Run Code Online (Sandbox Code Playgroud)