从另一个Python脚本终止一个Python脚本
我有一个运行很长时间的Python脚本,我希望能通过另一个Python脚本来结束它。理想情况下,我想给第一个脚本设置一个进程ID,然后通过这个ID来查看它是否还在运行。除此之外,我还想能够终止这个长时间运行的进程。
有没有什么简单的方法可以实现这个呢?
另外,我是在Windows环境下工作。
我最近在这里找到一个替代的答案:检查Python脚本是否在运行
3 个回答
0
在Windows 11和PyQt5环境下,这个方法对我有效:
subprocess.Popen('python3 MySecondApp.py')
Popen.terminate(app)
这里的app指的是MyFirstApp.py
(调用的脚本,正在运行)和MySecondApp.py
(被调用的脚本)
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。不过我不太确定如果是其他方式关闭的,状态会是什么。
8
你可以通过以下方式获取你自己的进程标识符(PID):
import os
os.getpid()
在Unix系统中,结束一个进程可以使用:
import os, signal
os.kill(5383, signal.SIGKILL)
在Windows系统中,结束进程可以使用:
import subprocess as s
def killProcess(pid):
s.Popen('taskkill /F /PID {0}'.format(pid), shell=True)
你可以把这个PID发送给其他程序,或者在进程列表中查找其他脚本的名称,然后用上面的脚本来结束它。
希望这些信息对你有帮助。