如何在python中停止另一个已经运行的脚本?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中停止另一个已经运行的脚本?相关的知识,希望对你有一定的参考价值。

有一种方法可以在python中启动另一个脚本:

import os

os.system("python [name of script].py")

那我怎么能阻止另一个已经运行的脚本呢?我想通过使用名称来停止脚本。

答案

导入其他脚本然后调用其函数和方法更为常见。

如果这对您不起作用,例如另一个脚本不是以有利于导入的方式编写的,那么你可以使用subprocess模块启动另一个进程。

import subprocess

p = subprocess.Popen(['python', 'script.py', 'arg1', 'arg2'])
# continue with your code then terminate the child
p.terminate()

有许多可能的方法来控制和与子进程交互,例如,你可以捕获它的stdout和sterr,并发送它输入。请参阅Popen()文档。

另一答案

如果按照mhawkes建议启动脚本是一个更好的选择,但要回答你如何按名称杀死已经启动的脚本的问题,你可以使用pkillsubprocess.check_call

from subprocess import check_call
import sys

script = sys.argv[1]


check_call(["pkill", "-9", "-f", script])

只需将名称传递给kill:

padraic@home:~$ cat kill.py
from subprocess import check_call
import sys

script = sys.argv[1]


check_call(["pkill", "-9", "-f", script])


padraic@home:~$ cat test.py
from time import sleep

while True:
   sleep(1)
padraic@home:~$ python test.py &
[60] 23361
padraic@home:~$ python kill.py test.py
[60]   Killed             python test.py
Killed

SIGKIll杀死进程,如果你想终止删除-9:

padraic@home:~$ cat kill.py
from subprocess import check_call
import sys

script = sys.argv[1]

check_call(["pkill", "-f", script])


padraic@home:~$ python test.py &
[61] 24062
padraic@home:~$ python kill.py test.py 
[61]   Terminated              python test.py
Terminated

这将发送一个SIGTERMTermination-Signals

另一答案

只需输入程序的名称而不是脚本的路径。所以它会

check_call(["pkill", "-f", "MotionDetector.py"])

以上是关于如何在python中停止另一个已经运行的脚本?的主要内容,如果未能解决你的问题,请参考以下文章

停止在另一个 Python 脚本中运行的一个 Python 脚本

如何使用谷歌应用程序脚本中的另一个函数停止一个函数?

在 KeyboardInterrupt 上关闭异步循环 - 运行停止例程

如何调试导致python崩溃的python脚本

如何在另一个脚本中运行 Python 脚本并立即关闭自身

如何停止运行没有 GUI 窗口的 Python .pyw 脚本?