Initial snapshot
This commit is contained in:
commit
fee4dd4e6d
373 changed files with 62144 additions and 0 deletions
173
test/packages/ktp/process.py
Normal file
173
test/packages/ktp/process.py
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
#
|
||||
# ---------- header -----------------------------------------------------------
|
||||
#
|
||||
# project kaneton
|
||||
#
|
||||
# license kaneton
|
||||
#
|
||||
# file /home/mycure/KANE...TEST-SYSTEM/test/packages/ktp/process.py
|
||||
#
|
||||
# created julien quintard [mon oct 25 20:54:05 2010]
|
||||
# updated julien quintard [thu nov 4 14:40:44 2010]
|
||||
#
|
||||
|
||||
#
|
||||
# ---------- packages ---------------------------------------------------------
|
||||
#
|
||||
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
import miscellaneous
|
||||
import ktp
|
||||
|
||||
#
|
||||
# ---------- definitions ------------------------------------------------------
|
||||
#
|
||||
|
||||
OptionNone = 0
|
||||
OptionBackground = 1
|
||||
|
||||
#
|
||||
# ---------- functions --------------------------------------------------------
|
||||
#
|
||||
|
||||
#
|
||||
# this function invokes a sub-process and returns either the status or a
|
||||
# monitor if the invocation has been performed in background.
|
||||
#
|
||||
def Invoke(command,
|
||||
arguments,
|
||||
stream = None,
|
||||
option = OptionNone):
|
||||
info = None
|
||||
directory = None
|
||||
file = None
|
||||
handle = None
|
||||
descriptor = None
|
||||
status = None
|
||||
output = None
|
||||
error = None
|
||||
|
||||
# retrive file information.
|
||||
info = os.path.split(command)
|
||||
|
||||
directory = info[0]
|
||||
file = info[1]
|
||||
|
||||
# change directory if required.
|
||||
if directory:
|
||||
wd = os.getcwd()
|
||||
os.chdir(directory)
|
||||
|
||||
# set up the stdout and stderr, according to the given stream file.
|
||||
if stream:
|
||||
# open the stream file.
|
||||
descriptor = os.open(stream, os.O_CREAT | os.O_TRUNC | os.O_WRONLY)
|
||||
|
||||
# set the output and error descriptors.
|
||||
output = descriptor
|
||||
error = subprocess.STDOUT
|
||||
else:
|
||||
# open the null stream file.
|
||||
descriptor = os.open(os.devnull, os.O_WRONLY)
|
||||
|
||||
# set the output and error descriptors so that to ignore everything.
|
||||
output = descriptor
|
||||
error = subprocess.STDOUT
|
||||
|
||||
# launch the command.
|
||||
handle = subprocess.Popen(command + " " + " ".join(arguments),
|
||||
stdout = output,
|
||||
stderr = error,
|
||||
shell = True)
|
||||
|
||||
# come back to the original directory if necessary.
|
||||
if directory:
|
||||
os.chdir(wd)
|
||||
|
||||
# return information according to the option.
|
||||
if option == OptionBackground:
|
||||
return (handle, stream, descriptor)
|
||||
else:
|
||||
# wait for the process to terminate.
|
||||
status = handle.wait()
|
||||
|
||||
# close the descriptor.
|
||||
if descriptor:
|
||||
os.close(descriptor)
|
||||
|
||||
if status != 0:
|
||||
return (ktp.StatusError)
|
||||
else:
|
||||
return (ktp.StatusOk)
|
||||
|
||||
#
|
||||
# this function waits for a process to terminate and return the status.
|
||||
#
|
||||
def Wait(monitor):
|
||||
handle = None
|
||||
stream = None
|
||||
descriptor = None
|
||||
status = None
|
||||
|
||||
# retrieve the information.
|
||||
(handle, stream, descriptor) = monitor
|
||||
|
||||
# wait for the process to terminate.
|
||||
status = handle.wait()
|
||||
|
||||
# close the descriptor.
|
||||
if descriptor:
|
||||
os.close(descriptor)
|
||||
|
||||
if status != 0:
|
||||
return (ktp.StatusError)
|
||||
else:
|
||||
return (ktp.StatusOk)
|
||||
|
||||
#
|
||||
# this function probes a process.
|
||||
#
|
||||
def Probe(monitor):
|
||||
handle = None
|
||||
stream = None
|
||||
descriptor = None
|
||||
status = None
|
||||
|
||||
# retrieve the information.
|
||||
(handle, stream, descriptor) = monitor
|
||||
|
||||
# probe the process.
|
||||
status = handle.poll()
|
||||
|
||||
if isinstance(status, int):
|
||||
# close the descriptor.
|
||||
if descriptor:
|
||||
os.close(descriptor)
|
||||
|
||||
if status != 0:
|
||||
return (ktp.StatusError)
|
||||
else:
|
||||
return (ktp.StatusOk)
|
||||
else:
|
||||
return (ktp.StatusUnknown)
|
||||
|
||||
#
|
||||
# this function terminates a process by killing it.
|
||||
#
|
||||
def Terminate(monitor):
|
||||
handle = None
|
||||
stream = None
|
||||
descriptor = None
|
||||
status = None
|
||||
|
||||
# retrieve the information.
|
||||
(handle, stream, descriptor) = monitor
|
||||
|
||||
# kill the process.
|
||||
handle.kill()
|
||||
|
||||
# close the descriptor.
|
||||
if descriptor:
|
||||
os.close(descriptor)
|
||||
Reference in a new issue