在2.4中终止Windows异步Popen进程
我有一个测试脚本,需要打开一个进程(一个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
@BrainCore:请注意,在Python 2.4的Windows系统上,os.kill这个功能是不可用的,建议查看相关文档。
我在Windows上使用Python 2.4时,结束一个subprocess.Popen对象的方法是这样的:
import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)
1
可以考虑把subprocess.py这个文件复制到你的python2.4的dist-packages目录里。这样做应该没问题,因为它只是旧的popen库的一个简单封装。
Popen对象的terminate函数其实就是做了以下几件事:
import os, signal
os.kill(pid, signal.SIGKILL)
这里的pid是子进程的进程ID,而signal.SIGKILL代表的是数字9,这是一个标准的unix杀死信号。你可以在这里查看如何在python 2.4中使用popen模块来创建一个子进程并获取它的pid: 这里。