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

时间:2016-05-29 14:47:05

标签: python 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:第19行:kill:/home/pi/count1.py:参数必须是进程或作业ID

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

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

2 个答案:

答案 0 :(得分:9)

你是对的,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.

答案 1 :(得分:0)

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

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

使用pkill。

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

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

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

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