#!/usr/bin/env python
# Copyright (c) 2001-2007 International Computer Science Institute
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software")
# to deal in the Software without restriction, subject to the conditions
# listed in the XORP LICENSE file. These conditions include: you must
# preserve this copyright notice, and you cannot mention the copyright
# holders in advertising related to the Software without their permission.
# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
# notice is a summary of the XORP LICENSE file; the license in that file is
# legally binding.
# $XORP: xorp/tests/test_process.py,v 1.2 2007/02/16 22:47:30 pavlin Exp $
import thread,threading,time,sys,os,popen2
class Process(threading.Thread):
"""
Start a process in a separate thread
"""
def __init__(self, command=""):
threading.Thread.__init__(self)
self._status = "INIT"
self.command = command
self.lock = thread.allocate_lock()
def run(self):
self.lock.acquire()
print "command:", self.command
self.process = popen2.Popen4("exec " + self.command)
print "PID:", self.process.pid
self._status = "RUNNING"
while 1:
o = self.process.fromchild.read(1)
if not o:
break
os.write(1, o)
self._status = "TERMINATED"
print "exiting:", self.command
self.lock.release()
def status(self):
return self._status
def terminate(self):
"""
Terminate this process
"""
print "sending kill to", self.command, self.process.pid
if self._status == "RUNNING":
os.kill(self.process.pid, 9)
self.lock.acquire()
self.lock.release()
else:
print self.command, "not running"
# Local Variables:
# mode: python
# py-indent-offset: 4
# End:
syntax highlighted by Code2HTML, v. 0.9.1