在另一个脚本终止后运行python脚本

2024-06-12 04:30:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,需要几个小时才能完成。我通常把它当作:

python myscript.py arg1 arg2 ... argN 2> log.err > log.out &

我希望有一个shell脚本,它可以在同一个python脚本(使用不同的参数)上运行多次。此脚本必须仅在第一个python脚本终止时启动第二个python脚本,依此类推。我认为我应该使用进程的PID,并在一些while循环中使用sleep进行迭代检查。有什么建议吗?这些脚本是在远程机器上执行的,因此我必须将它们放在后台,以保证它们即使在我注销时也能继续执行。


Tags: py脚本log参数进程shelloutpid
3条回答

不要在每次调用python时都使用后台,而是使用一个脚本来逐个运行所有作业并在脚本的后台运行。例如:

#!/bin/sh

python myscript.py arg1 arg2 ... argN 2> log.err > log.out
python myscript.py different_args
# etc.

使脚本可执行(chmod +x script.sh),并从类似于./script.sh &的shell运行它


也许你应该看看像screen这样的工具,它会在你注销后保持你的作业运行。如果执行screen ./script.sh,然后分离(ctrl-a-d)并注销,脚本将继续运行。然后您可以稍后重新登录并使用screen -r重新连接。

如果希望一个脚本直接在另一个脚本之后运行,只需删除后面的&。与号告诉bash在后台运行进程,这允许您并行运行多个进程(有些在后台,有些在前台)。如果要按顺序运行它们,则应在前台分别运行它们,如下所示:

python myscript.py argX1 argX2 ... argXN 2> logX.err > logX.out
python myscript.py argY1 argY2 ... argYN 2> logY.err > logY.out

这将使用argx参数运行脚本,然后在完成后,使用argY参数再次运行相同的脚本。

如果希望下一次执行仅在第一次运行成功时运行,可以使用双与号(&&)这样(请注意,后面的反斜杠(\)将转义换行符,因此整个操作实际上是一个命令):

python myscript.py argx1 argx2 ... argN 2> logx.err > logx.out && \
python myscript.py argy1 argy2 ... argN 2> logy.err > logy.out

可以使用双和号链接两个以上的命令,但对于较长的脚本,应考虑在开始时使用set -e,这将导致bash在第一个错误之后停止执行脚本(请参见http://www.davidpashley.com/articles/writing-robust-shell-scripts/#id2382181

制作一个bash脚本?

python first.py
python second.py

相关问题 更多 >