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

时间:2016-04-17 12:00:49

标签: python import os.system

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

push

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

3 个答案:

答案 0 :(得分:4)

更常见的是导入其他脚本,然后调用其功能和方法。

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

import subprocess

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

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

答案 1 :(得分:2)

如果按照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

如果要终止删除-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

这将发送SIGTERMTermination-Signals

答案 2 :(得分:0)

只需输入程序名称,而不是脚本路径即可。 所以应该是

grails-app/views/_fields/java/sql/date/_displayWidget.gsp