# driver -x -g 2 -s -e "popo.xml" -v -kt -i "PyScript0.p1=7" -f "tutu.xml" micro_schema2.xml
# driver micro_schema3.xml
+import driver_internal
+import subprocess as sp
import salome
-import logging
+import SALOME_Embedded_NamingService_ClientPy
-my_runtime_yacs = None
+import signal
+import SALOMERuntime
+import os
-def initializeSALOME():
- import SALOMERuntime
- global my_runtime_yacs
- if my_runtime_yacs:
- return
- salome.salome_init()
- flags = SALOMERuntime.RuntimeSALOME.UsePython + SALOMERuntime.RuntimeSALOME.UseCorba + SALOMERuntime.RuntimeSALOME.UseXml + SALOMERuntime.RuntimeSALOME.UseCpp + SALOMERuntime.RuntimeSALOME.UseSalome
- SALOMERuntime.RuntimeSALOME.setRuntime( flags )
- my_runtime_yacs = SALOMERuntime.getSALOMERuntime()
- anIOR = salome.orb.object_to_string ( salome.modulcat )
- aCatalog = my_runtime_yacs.loadCatalog( "session", anIOR )
- my_runtime_yacs.addCatalog( aCatalog )
+proc = None
+ior_file = None
-def SALOMEInitializationNeeded(func):
- def decaratedFunc(*args,**kwargs):
- initializeSALOME()
- return func(*args,**kwargs)
- return decaratedFunc
-
-@SALOMEInitializationNeeded
-def loadGraph( xmlFileName ):
- """
- Args:
- -----
- xmlFileName : XML file containing YACS schema
-
- Returns
- -------
-
- SALOMERuntime.SalomeProc : YACS graph instance
- """
- import loader
- l=loader.YACSLoader()
- p=l.load( xmlFileName )
- return p
-
-def patchGraph( proc, squeezeMemory, initPorts, xmlSchema, loadStateXmlFile, reset, display):
- """
- Args:
- -----
-
- proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
- squeezeMemory ( bool ) : squeezememory to be activated
- initPorts (list<string>) : list of bloc.node.port=value.
- xmlSchema (string) :
- loadStateXmlFile (string) : file if any of state to be loaded inside proc
- reset (int) :
- display (int) :
- """
- import SALOMERuntime
- import loader
- def parse_init_port(input):
- """
- Returns
- -------
- node, port, value
- """
- node_port, value = input.split("=")
- nodePortSpl = node_port.split(".")
- port = nodePortSpl[-1]
- node = ".".join( nodePortSpl[:-1] )
- return node,port,value
-
- if squeezeMemory:
- logging.info("SqueezeMemory requested -> update proc")
- allNodes = proc.getAllRecursiveNodes()
- for node in allNodes:
- if isinstance(proc,SALOMERuntime.PythonNode):
- node.setSqueezeStatus( True )
- #
- for initPort in initPorts:
- node,port,value = parse_init_port(initPort)
- init_state = proc.setInPortValue(node, port, value)
- if init_state != value:
- raise RuntimeError(f"Error on initialization of {initPort}")
- #
- if xmlSchema:
- SALOMERuntime.VisitorSaveSalomeSchemaUnsafe(proc,xmlSchema)
- pass
- #
- if loadStateXmlFile:
- loader.loadState( proc, loadStateXmlFile )
- if reset > 0:
- proc.resetState(reset)
- proc.exUpdateState()
- #
- if display > 0:
- proc.writeDotInFile("toto")
-
-@SALOMEInitializationNeeded
-def prepareExecution(proc, isStop, dumpErrorFile):
- """
- Returns
- -------
-
- pilot.ExecutorSwig : Instance of executor
- """
- import pilot
- ex=pilot.ExecutorSwig()
- if isStop:
- logging.info(f"Stop has been activated with {dumpErrorFile}")
- ex.setStopOnError( dumpErrorFile!="", dumpErrorFile )
- return ex
-
-@SALOMEInitializationNeeded
-def executeGraph( executor, xmlfilename, proc, dump, finalDump, display, shutdown ):
- """
- Args:
- -----
-
- executor (pilot.ExecutorSwig) : Executor in charge of evaluation.
- proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
- xmlfilename (string)
- dump (int) : time interval between 2 dump state
- finalDump ( string ) : filename containing final result of graph, if any.
- display (int) :
- shutdown (int) : shutdown level
- """
- import signal
- import SALOMERuntime
- def handler(signum, frame):
- print('Signal handler called with signal', signum)
- proc.cleanNodes()
- if finalDump:
- SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
- if shutdown < 999:
- print(100*"shutdown")
- proc.shutdown(shutdown)
-
- signal.signal(signal.SIGINT, handler)
- signal.signal(signal.SIGTERM, handler)
- dump_thread = None
- import pilot
- import os
-
- if dump != 0:
- dumpFile = "dumpState_{}".format( os.path.basename(xmlfilename) )
- lockFile = "{}.lock".format( os.path.splitext( os.path.basename(xmlfilename) )[0] )
- dump_thread = SALOMERuntime.ThreadDumpState(proc,dump,dumpFile,lockFile)
- dump_thread.start()
-
- executor.RunPy(proc,display,isPyThread=True,fromscratch=True) # same as RunW but releasing GIL
- if proc.getEffectiveState() != pilot.DONE:
- raise RuntimeError( proc.getErrorReport() )
- #
- if display > 0:
- proc.writeDotInFile("titi")
- #
- if dump_thread:
- dump_thread.join()
- #
- if finalDump:
- logging.info(f"Final dump requested : {finalDump}")
- SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
-
-@SALOMEInitializationNeeded
-def destroyElementsGeneratedByExecutionOfGraph( proc, shutdown ):
- """
- Args:
- -----
-
- shutdown (int) : shutdown level
-
- """
- if shutdown < 999:
- proc.shutdown(shutdown)
- salome.dsm.shutdownScopes()
- my_runtime_yacs.fini( False )
+def handler(signum, frame):
+ global proc
+ print('Signal handler called with signal', signum, proc.pid)
+ ns = SALOME_Embedded_NamingService_ClientPy.SALOME_Embedded_NamingService_ClientPy( salome.naming_service.LoadIORInFile( ior_file ) )
+ print( ns.repr() )
+ cm = ns.Resolve(salome.CM_NAME_IN_NS)
+ cm.ShutdownContainers()
+ os.kill( proc.pid, signal.SIGKILL )
if __name__ == "__main__":
- from salome_utils import positionVerbosityOfLoggerRegardingState,setVerboseLevel,setVerbose
- import argparse
- parser = argparse.ArgumentParser()
- parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
- parser.add_argument("-d", "--display", dest = "display", type=int, default=[0], nargs=1, help="Display dot files: 0=never to 3=very often")
- parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
- parser.add_argument("-s","--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
- parser.add_argument("-e","--dump-on-error",dest="dumpErrorFile", type=str, const='dumpErrorState.xml', default="", nargs='?', help="Stop on first error and dump state")
- parser.add_argument("-g","--dump",dest="dump", type=int, const=60, default=0, nargs='?', help="dump state")
- parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
- parser.add_argument("-f","--dump-final", dest ="finalDump", type=str, const='finalDumpState.xml', default="", nargs='?', help="dump final state")
- parser.add_argument("-l","--load-state", dest="loadState", type=str, default="", help="Load State from a previous partial execution")
- parser.add_argument("-x","--save-xml-schema", dest="saveXMLSchema", type=str, const="saveSchema.xml", nargs='?', default="", help = "dump xml schema")
- parser.add_argument("-t","--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
- parser.add_argument("-r","--reset", dest = "reset", type=int , default = 0, help="Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state")
- parser.add_argument("-i","--init-port", dest = 'init_port', type=str, default ="", help="Initialisation value of a port, specified as bloc.node.port=value.")
- parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
- args = parser.parse_args()
- args.display = args.display[0]
- #
- if args.verbose:
- setVerbose( args.kerneltrace )
- setVerboseLevel(logging.INFO)
- positionVerbosityOfLoggerRegardingState()
- #
- proc = loadGraph( args.xmlfilename )
- patchGraph( proc, not args.donotsqueeze, [elt for elt in args.init_port.split(",") if elt !=""], args.saveXMLSchema, args.loadState, args.reset, args.display)
- executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
- #
- executeGraph( executor, args.xmlfilename, proc, args.dump, args.finalDump, args.display, args.shutdown)
- #
- destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )
+ salome.salome_init()
+ import sys
+ signal.signal(signal.SIGINT, handler)
+ signal.signal(signal.SIGTERM, handler)
+ ior_file = "toto.ior"
+ iorStuff = "{}={}".format( driver_internal.IOREntryInCMD, ior_file)
+ argv = [elt for elt in sys.argv[1:] if elt != ""]
+ proc = sp.Popen( ["python3",driver_internal.__file__] + [ iorStuff ] + argv )
+ proc.communicate()
import salome
import logging
+IOREntryInCMD = "--ior-ns"
+
my_runtime_yacs = None
+my_ior_ns = None
+
def initializeSALOME():
import SALOMERuntime
global my_runtime_yacs
if my_runtime_yacs:
return
salome.salome_init()
+ if my_ior_ns:
+ salome.naming_service.DumpIORInFile( my_ior_ns )
flags = SALOMERuntime.RuntimeSALOME.UsePython + SALOMERuntime.RuntimeSALOME.UseCorba + SALOMERuntime.RuntimeSALOME.UseXml + SALOMERuntime.RuntimeSALOME.UseCpp + SALOMERuntime.RuntimeSALOME.UseSalome
SALOMERuntime.RuntimeSALOME.setRuntime( flags )
my_runtime_yacs = SALOMERuntime.getSALOMERuntime()
display (int) :
shutdown (int) : shutdown level
"""
- import signal
import SALOMERuntime
- def handler(signum, frame):
- print('Signal handler called with signal', signum)
- proc.cleanNodes()
- if finalDump:
- SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
- if shutdown < 999:
- print(100*"shutdown")
- proc.shutdown(shutdown)
-
- signal.signal(signal.SIGINT, handler)
- signal.signal(signal.SIGTERM, handler)
dump_thread = None
import pilot
import os
salome.dsm.shutdownScopes()
my_runtime_yacs.fini( False )
+def getArgumentParser():
+ import argparse
+ parser = argparse.ArgumentParser()
+ parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
+ parser.add_argument("-d", "--display", dest = "display", type=int, default=[0], nargs=1, help="Display dot files: 0=never to 3=very often")
+ parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
+ parser.add_argument("-s","--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
+ parser.add_argument("-e","--dump-on-error",dest="dumpErrorFile", type=str, const='dumpErrorState.xml', default="", nargs='?', help="Stop on first error and dump state")
+ parser.add_argument("-g","--dump",dest="dump", type=int, const=60, default=0, nargs='?', help="dump state")
+ parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
+ parser.add_argument("-f","--dump-final", dest ="finalDump", type=str, const='finalDumpState.xml', default="", nargs='?', help="dump final state")
+ parser.add_argument("-l","--load-state", dest="loadState", type=str, default="", help="Load State from a previous partial execution")
+ parser.add_argument("-x","--save-xml-schema", dest="saveXMLSchema", type=str, const="saveSchema.xml", nargs='?', default="", help = "dump xml schema")
+ parser.add_argument("-t","--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
+ parser.add_argument("-r","--reset", dest = "reset", type=int , default = 0, help="Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state")
+ parser.add_argument("-i","--init-port", dest = 'init_port', type=str, default ="", help="Initialisation value of a port, specified as bloc.node.port=value.")
+ parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
+ parser.add_argument(IOREntryInCMD, dest = "iorNS", type=str, default ="", help="file inside which the ior of NS will be stored")
+ return parser
+
+def mainRun( args ):
+ global my_ior_ns
+ from salome_utils import positionVerbosityOfLoggerRegardingState,setVerboseLevel,setVerbose
+ args.display = args.display[0]
+ #
+ if args.iorNS:
+ my_ior_ns = args.iorNS
+ #
+ if args.verbose:
+ setVerbose( args.kerneltrace )
+ setVerboseLevel(logging.INFO)
+ positionVerbosityOfLoggerRegardingState()
+ #
+ proc = loadGraph( args.xmlfilename )
+ patchGraph( proc, not args.donotsqueeze, [elt for elt in args.init_port.split(",") if elt !=""], args.saveXMLSchema, args.loadState, args.reset, args.display)
+ executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
+ #
+ executeGraph( executor, args.xmlfilename, proc, args.dump, args.finalDump, args.display, args.shutdown)
+ #
+ destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )
+
+
if __name__ == "__main__":
- from salome_utils import positionVerbosityOfLoggerRegardingState,setVerboseLevel,setVerbose
- import argparse
- parser = argparse.ArgumentParser()
- parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
- parser.add_argument("-d", "--display", dest = "display", type=int, default=[0], nargs=1, help="Display dot files: 0=never to 3=very often")
- parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
- parser.add_argument("-s","--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
- parser.add_argument("-e","--dump-on-error",dest="dumpErrorFile", type=str, const='dumpErrorState.xml', default="", nargs='?', help="Stop on first error and dump state")
- parser.add_argument("-g","--dump",dest="dump", type=int, const=60, default=0, nargs='?', help="dump state")
- parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
- parser.add_argument("-f","--dump-final", dest ="finalDump", type=str, const='finalDumpState.xml', default="", nargs='?', help="dump final state")
- parser.add_argument("-l","--load-state", dest="loadState", type=str, default="", help="Load State from a previous partial execution")
- parser.add_argument("-x","--save-xml-schema", dest="saveXMLSchema", type=str, const="saveSchema.xml", nargs='?', default="", help = "dump xml schema")
- parser.add_argument("-t","--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
- parser.add_argument("-r","--reset", dest = "reset", type=int , default = 0, help="Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state")
- parser.add_argument("-i","--init-port", dest = 'init_port', type=str, default ="", help="Initialisation value of a port, specified as bloc.node.port=value.")
- parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
- args = parser.parse_args()
- args.display = args.display[0]
- #
- if args.verbose:
- setVerbose( args.kerneltrace )
- setVerboseLevel(logging.INFO)
- positionVerbosityOfLoggerRegardingState()
- #
- proc = loadGraph( args.xmlfilename )
- patchGraph( proc, not args.donotsqueeze, [elt for elt in args.init_port.split(",") if elt !=""], args.saveXMLSchema, args.loadState, args.reset, args.display)
- executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
- #
- executeGraph( executor, args.xmlfilename, proc, args.dump, args.finalDump, args.display, args.shutdown)
- #
- destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )
+ parser = getArgumentParser()
+ args = parser.parse_args()
+ mainRun( args )