在 python 中以编程方式执行和终止一个长时间运行的批处理 [英] programmatically executing and terminating a long-running batch process in python

查看:43
本文介绍了在 python 中以编程方式执行和终止一个长时间运行的批处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在寻找一种在 python 中启动和终止长期运行的批处理作业"的方法.现在我正在使用os.system()"在每个子进程中启动一个长时间运行的批处理作业.正如您可能已经猜到的那样,os.system()"会在该子进程(孙进程?)中生成一个新进程,因此我无法从祖父进程中终止批处理作业.为我刚才描述的内容提供一些可视化:

I have been searching for a way to start and terminate a long-running "batch jobs" in python. Right now I'm using "os.system()" to launch a long-running batch job inside each child process. As you might have guessed, "os.system()" spawns a new process inside that child process (grandchild process?), so I cannot kill the batch job from the grand-parent process. To provide some visualization of what I have just described:

Main (grandparent) process, with PID = AAAA
          |
          |------> child process with PID = BBBB
                         |
                         |------> os.system("some long-running batch file)
                                  [grandchild process, with PID = CCCC]

所以,我的问题是我无法从祖父母那里杀死孙子进程...

So, my problem is I cannot kill the grandchild process from the grandparent...

我的问题是,有没有办法在子进程中启动长时间运行的批处理作业,并且能够通过终止子进程来终止该批处理作业?我可以使用 os.system() 的替代方法来终止主进程中的批处理作业吗?

My question is, is there a way to start a long-running batch job inside a child process, and being able to kill that batch job by just terminating the child process? What are the alternatives to os.system() that I can use so that I can kill the batch-job from the main process ?

谢谢!!

推荐答案

subprocess 模块是在 Python 中生成和控制进程的正确方法.

subprocess module is the proper way to spawn and control processes in Python.

来自文档:

子流程模块允许您产生新的进程,连接到他们的输入/输出/错误管道,并获得他们的返回码.这个模块打算替换其他几个,较旧的模块和功能,例如:

The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several other, older modules and functions, such as:

os.system
os.spawn
os.popen
popen2
命令

os.system
os.spawn
os.popen
popen2
commands

所以...如果您使用的是 Python 2.4+,subprocessos.system

so... if you are on Python 2.4+, subprocess is the replacement for os.system

要停止进程,请查看 Popen 对象的 terminate()communicate() 方法.

for stopping processes, check out the terminate() and communicate() methods of Popen objects.

这篇关于在 python 中以编程方式执行和终止一个长时间运行的批处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆