如何在 python 中停止另一个已经 运行 的脚本?
How to stop another already running script in 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 的建议启动脚本,这是一个更好的选择,但是要回答您关于如何按名称终止已经启动的脚本的问题,您可以使用 pkill and subprocess.check_call:
from subprocess import check_call
import sys
script = sys.argv[1]
check_call(["pkill", "-9", "-f", script])
传名字就杀:
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
如果你想终止删除 -9:
则用 SIGKIll
终止进程
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
那将发送一个SIGTERM
。 Termination-Signals
只需输入程序名称,而不是脚本的路径。
所以它会是
check_call(["pkill", "-f", "MotionDetector.py"])
有一种方法可以在 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 的建议启动脚本,这是一个更好的选择,但是要回答您关于如何按名称终止已经启动的脚本的问题,您可以使用 pkill and subprocess.check_call:
from subprocess import check_call
import sys
script = sys.argv[1]
check_call(["pkill", "-9", "-f", script])
传名字就杀:
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
如果你想终止删除 -9:
则用SIGKIll
终止进程
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
那将发送一个SIGTERM
。 Termination-Signals
只需输入程序名称,而不是脚本的路径。 所以它会是
check_call(["pkill", "-f", "MotionDetector.py"])