从另一个python脚本终止一个python脚本

10

我有一个长时间运行的Python脚本,希望能够从另一个Python脚本中结束它。理想情况下,我希望能够为第一个脚本设置一个进程ID,并能够通过该ID从第二个脚本中查看其是否正在运行。此外,我希望能够终止这个长时间运行的进程。

有没有快捷的方法来实现这个目标呢?

另外,我在Windows环境中工作。

我最近在这里找到了一个替代答案:检查 Python 脚本是否在运行

3个回答

8
您可以通过以下方式获取自己的PID(进程标识符):
import os
os.getpid()

在Unix中终止一个进程
import os, signal
os.kill(5383, signal.SIGKILL)

在Windows中使用kill命令

import subprocess as s
def killProcess(pid):
    s.Popen('taskkill /F /PID {0}'.format(pid), shell=True)

你可以将PID发送给其他程序,或者在进程列表中搜索以找到另一个脚本的名称,并使用上述脚本将其终止。
希望这能帮助你。

os.kill 是仅限于 Unix 操作系统的操作。 - Nick
os.kill可以被模拟:http://docs.python.org/faq/windows.html#how-do-i-emulate-os-kill-in-windows - Nick

5

您需要使用subprocess模块

import subprocess as sp

extProc = sp.Popen(['python','myPyScript.py']) # runs myPyScript.py 

status = sp.Popen.poll(extProc) # status should be 'None'

sp.Popen.terminate(extProc) # closes the process

status = sp.Popen.poll(extProc) # status should now be something other than 'None' ('1' in my testing)

subprocess.Popen启动外部的Python脚本,相当于在控制台或终端中输入“python myPyScript.py”。

subprocess.Popen.poll(extProc)返回的状态如果进程仍在运行,则为“None”,如果从脚本内部关闭则为1(对我来说是这样)。如果它是被其他方式关闭的,则不确定状态是什么。


0

这个在 Windows 11 和 PyQt5 下对我有效:

subprocess.Popen('python3 MySecondApp.py')
Popen.terminate(app)

其中应用程序是 MyFirstApp.py(调用脚本,正在运行)和 MySecondApp.py(被调用脚本)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接