繁体   English   中英

如何从shell启动和停止Python脚本

[英]How can I start and stop a Python script from shell

谢谢你的帮助!

我想从shell脚本启动和停止Python脚本。 开始工作正常,但我想在10秒后停止/终止Python脚本。 (这是一个不断计数的计数器)。 芽是不会停止....我认为它挂在第一行。

什么是开始等待10秒的正确方法?

Shell脚本:

python /home/pi/count1.py

sleep 10

kill /home/pi/count1.py

它还没有工作。 我明白在后台编写脚本。 那工作! 但在做完后,我从树莓树上得到另一条评论:

python /home/pi/count1.py & 

sleep 10; kill /home/pi/count1.py

/home/pi/sebastiaan.sh:line 19:kill:/home/pi/count1.py:参数必须是进程或作业ID

它必须在:(但是什么?感谢您的帮助!)

sleep 10; kill /home/pi/count1.py

你是对的,shell脚本在第一行“挂起”,直到python脚本完成。 如果没有,则shell脚本将不会继续。 因此,您必须在shell命令的末尾使用&在后台运行它。 这样,python脚本启动,shell脚本继续。

kill命令不带路径,它需要一个进程id。 毕竟,您可能会多次运行相同的程序,然后尝试杀死第一个或最后一个。

bash shell支持$! 变量,这是最后一个后台进程的pid。

您当前的示例脚本是错误的,因为它不会并行运行python作业和睡眠作业。 没有装饰,脚本将等待python作业完成,然后睡10秒,然后杀死。

你可能想要的是:

python myscript.py &     # <-- Note '&' to run in background

LASTPID=$!               # Save $! in case you do other background-y stuff

sleep 10; kill $LASTPID  # Sleep then kill to set timeout.

如果操作系统允许,您可以终止任何其他进程。 即如果它不是属于操作系统本身的一些关键过程。

命令kill使用PID来终止进程,而不是进程的名称或命令。

使用pkill。

您也可以发送一个不同的信号,而不是SIGTERM(请求终止程序),您可能希望在Python应用程序中检测并响应它。

例如,您可能希望检查进程是否处于活动状态并从中获取一些数据。

为此,请选择一个用户自定义信号,并使用信号模块在Python程序中注册它们。

要查看脚本挂起的原因,请参阅Austin的答案。

暂无
暂无

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

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