在2.4中杀死Windows异步Popen进程

时间:2009-12-03 21:19:30

标签: python subprocess popen pyro

我有一个测试脚本需要打开一个进程(一个Pyro服务器),做一些会调用打开的进程获取信息的东西,当它完成所有操作时需要关闭进程。它是临时服务器上自动化测试的一部分。

在python 2.6中,你可以这样做:

pyro_server = subprocess.Popen(['python', 'pyro_server.py'])
# Do stuff, making remote calls to the Pyro server on occasion
pyro_server.terminate()

唉,我在工作中遇到了python 2.4,所以我无法访问该功能。如果我只是让脚本结束当然服务器继续存在。在脚本退出之前,我应该怎么做才能关闭/终止该进程?

2 个答案:

答案 0 :(得分:1)

  1. 考虑将subprocess.py复制到python2.4 dist-packages目录。它应该工作,因为它是旧的popen库的简单包装。

  2. Popen对象终止函数只执行以下操作:

    导入操作系统,信号

    os.kill(pid,signal.SIGKILL)

  3. pid是子进程的进程ID。 signal.SIGKILL是数字9,是标准的unix终止信号。您可以看到如何使用popen模块here生成子进程并在python 2.4中获取其pid:

答案 1 :(得分:0)

@BrainCore:注意os.kill在python24的Windows上不可用,请查看文档。

我在使用python24时杀死windows上的subprocess.Popen对象的解决方案是:

import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)