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

时间:2010-09-09 20:50:06

标签: python operating-system batch-file subprocess multiprocessing

我一直在寻找一种在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()的替代方法,以便从主进程中删除批处理作业?

谢谢!

3 个答案:

答案 0 :(得分:3)

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

来自文档:

  

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

<强>使用os.system
os.spawn
os.popen
popen2
命令

所以...如果您使用的是Python 2.4+,subprocess将取代os.system

要停止流程,请查看terminate()个对象的communicate()Popen方法。

答案 1 :(得分:2)

如果您使用的是兼容Posix的系统(例如,Linux或OS X),并且在子进程后不必运行Python代码,请使用os.execv。通常,请避免使用os.system并使用subprocess模块。

答案 2 :(得分:-1)

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