繁体   English   中英

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

[英]Run python script after another is terminated

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

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

我想要一个shell脚本运行几次相同的python脚本(使用不同的参数)。 此脚本必须在第一个脚本终止时启动第二个python脚本,依此类推。 我想我应该使用进程的PID并在一些while循环中迭代检查使用sleep。 有什么建议么? 脚本在远程机器中执行,因此我必须将它们放在后台,以便即使我退出也能保证它们继续执行。

不是为python的每次调用设置背景,而是使用一个脚本,该脚本逐个运行所有作业并为脚本提供背景。 例如:

#!/bin/sh

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

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


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

例如,您可以使用循环(使用下一个内容制作脚本runner.sh

n=0
while read -r line
do
    let n++
    echo python myscript.py $line #>log.$n.log 2>log.$n.err
done <<ARGS
a1 a2 a3 a4
b1 b2
c1 c2 c3 c4
ARGS

这将使用args dry run你的python脚本

a1 a2 a3 a4
b1 b2
c1 c2 c3 c4

顺序地,例如当前一个结束时。

如果您满意,请从行中删除echo#

    echo python myscript.py $line #>log.$n.log 2>log.$n.err

日志文件将按顺序编号... 1..n

为什么要在后台运行python脚本? 您总是可以将上述脚本发送到后台,整个序列将在bg完成。

如果您需要在注销后运行它,请使用上面的runner.sh作为

chmod 755 runner.sh
nohup runner.sh
logout

或者更好地使用screen实用程序,您可以从其他地方注销和登录并重新附加会话等...阅读man screen

制作一个bash脚本?

python first.py
python second.py

如果您希望一个脚本直接在另一个脚本之后运行,只需删除尾随& &符号告诉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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM