我有一个长时间运行的Python脚本,希望能够从另一个Python脚本中结束它。理想情况下,我希望能够为第一个脚本设置一个进程ID,并能够通过该ID从第二个脚本中查看其是否正在运行。此外,我希望能够终止这个长时间运行的进程。
有没有快捷的方法来实现这个目标呢?
另外,我在Windows环境中工作。
我最近在这里找到了一个替代答案:检查 Python 脚本是否在运行
我有一个长时间运行的Python脚本,希望能够从另一个Python脚本中结束它。理想情况下,我希望能够为第一个脚本设置一个进程ID,并能够通过该ID从第二个脚本中查看其是否正在运行。此外,我希望能够终止这个长时间运行的进程。
有没有快捷的方法来实现这个目标呢?
另外,我在Windows环境中工作。
我最近在这里找到了一个替代答案:检查 Python 脚本是否在运行
import os
os.getpid()
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)
您需要使用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(对我来说是这样)。如果它是被其他方式关闭的,则不确定状态是什么。
这个在 Windows 11 和 PyQt5 下对我有效:
subprocess.Popen('python3 MySecondApp.py')
Popen.terminate(app)
其中应用程序是 MyFirstApp.py
(调用脚本,正在运行)和 MySecondApp.py
(被调用脚本)