在Python中以编程方式执行和终止长时间运行的批处理

发布于 2024-09-19 01:52:33 字数 628 浏览 5 评论 0原文

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

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

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

我的问题是,有没有办法在子进程内启动长时间运行的批处理作业,并且能够通过终止子进程来终止批处理作业吗? 我可以使用 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...

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 ?

Thanks !!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你穿错了嫁妆 2024-09-26 01:52:33

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

来自文档:

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

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

所以...如果您在Python 2.4+,subprocessos.system 的替代品

,用于停止进程,请查看 terminate()communicate() Popen 对象的 方法。

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

from the docs:

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
commands

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

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

冷心人i 2024-09-26 01:52:33

如果您使用的是 Posix 兼容系统(例如 Linux 或 OS X)并且子进程后无需运行任何 Python 代码,请使用 os.execv。一般来说,避免使用 os.system 并使用 subprocess 模块。

If you are on a Posix-compatible system (e.g., Linux or OS X) and no Python code has to be run after the child process, use os.execv. In general, avoid os.system and use the subprocess module instead.

美人如玉 2024-09-26 01:52:33

如果您想控制子进程的启动和停止,则必须使用线程。在这种情况下,只需看看 Python 的 threading 模块。

If you want control over start and stop of child processes you have to use threading. In that case, look no further than Python's threading module.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文