diff --git a/postProLoop.py b/postProLoop.py index 254cec189ae8db3039063d4549339aa512a2a701..ac7ec14193d1cadfa96c4112e655104d1285ad9d 100755 --- a/postProLoop.py +++ b/postProLoop.py @@ -13,6 +13,7 @@ import externalProgramPath # Variable globale import threading matlock = threading.Lock() # un seul matlab a la fois (merdouille avec le R2009a sous windows) +sciLock = threading.Lock() # un seul SciLab a la fois (vérifier nécessité) #------------------------------------------------------------------------------------ class PostProLoop(PRMSet): @@ -47,6 +48,12 @@ class PostProLoop(PRMSet): TextPRM (self.pars, 'MATLABCMD', 'Matlab Command (script called)', '') TextPRM (self.pars, 'MATLABPATH', 'Path to Matlab scripts', '') TextPRM (self.pars, 'MATLABREQUEST', 'Requested file to run Matlab script', 'parameters.m') #'result.mat', ... + # Scilab + YesNoPRM(self.pars, 'SCILABRUN', 'Execute a Scilab function', False) + TextPRM (self.pars, 'SCILABEXE', 'Path To Scilab Exe', progs['SCILAB']) + TextPRM (self.pars, 'SCILABCMD', 'Scilab Command (script called)', '') + TextPRM (self.pars, 'SCILABPATH', 'Path to Scilab scripts', '') + TextPRM (self.pars, 'SCILABREQUEST', 'Requested file to run Scilab script', 'parameters.sci') #'result.sod', ... # GS YesNoPRM(self.pars, 'GSRUN', 'Run GS on Eps Files', False) TextPRM (self.pars, 'GSEXE', 'Path To Matlab Exe', progs['GHOSTSCRIPT']) @@ -76,6 +83,14 @@ class PostProLoop(PRMSet): PRMAction(self.actions, 'i', self.pars['MATLABPATH']) PRMAction(self.actions, 'j', self.pars['MATLABREQUEST']) NoAction(self.actions) + # Scilab + NoAction(self.actions) + PRMAction(self.actions, '1', self.pars['SCILABRUN']) + PRMAction(self.actions, '2', self.pars['SCILABEXE']) + PRMAction(self.actions, '3', self.pars['SCILABCMD']) + PRMAction(self.actions, '4', self.pars['SCILABPATH']) + PRMAction(self.actions, '5', self.pars['SCILABREQUEST']) + NoAction(self.actions) # GhostScript PRMAction(self.actions, 'k', self.pars['GSRUN']) PRMAction(self.actions, 'l', self.pars['GSEXE']) @@ -107,6 +122,11 @@ class PostProLoop(PRMSet): self.pars['MATLABEXE'].enable(self.pars['MATLABRUN'].val==True) self.pars['MATLABPATH'].enable(self.pars['MATLABRUN'].val==True) self.pars['MATLABREQUEST'].enable(self.pars['MATLABRUN'].val==True) + # Scilab + self.pars['SCILABCMD'].enable(self.pars['SCILABRUN'].val==True) + self.pars['SCILABEXE'].enable(self.pars['SCILABRUN'].val==True) + self.pars['SCILABPATH'].enable(self.pars['SCILABRUN'].val==True) + self.pars['SCILABREQUEST'].enable(self.pars['SCILABRUN'].val==True) # GhostScript self.pars['GSEXE'].enable(self.pars['GSRUN'].val==True) self.pars['GSFILTER'].enable(self.pars['GSRUN'].val==True) @@ -184,6 +204,11 @@ class PostProLoop(PRMSet): #out = matlab.execMatlabScript(self.pars['MATLABCMD'].val , self.pars['MATLABPATH'].val) print("matlab done") + if self.pars['SCILABRUN'].val and self.checkRequest(self.pars['SCILABREQUEST'].val): + print ("launch scilab...") + out = execScilabScript(self.pars['SCILABEXE'].val, self.pars['SCILABCMD'].val , self.pars['SCILABPATH'].val) + #out = scilab.execScilabScript(self.pars['SCILABCMD'].val , self.pars['SCILABPATH'].val) + print ("scilab done") if self.pars['GSRUN'].val and self.checkRequest(self.pars['GSREQUEST'].val): print("launch Ghostscript translation of eps files...") #execGhostScriptPostPro(device='png256', outExt='png',res=300) @@ -243,7 +268,51 @@ def execMatlabScript(matlabExe, matlabCmd, mFilePath=None): return a #================================================================================= #================================================================================= - +def execScilabScript(scilabExe, scilabCmd, sciFilePath=None, verb=True): + sciCmd = "" + if sciFilePath : + print ("sciFilePath = ",sciFilePath) + sciCmd = sciCmd + "getd('%s'); " %sciFilePath + sciCmd = sciCmd + scilabCmd + if verb : + print ("entering execSciLabPostPro") + print ("sciCmd = ",sciCmd) + progs = externalProgramPath.ExtProgs() + if not progs.checkValidity('SCILAB') : + return 0 + # log file + logFile = os.path.abspath("sciLab.log") + if verb : + print ("logFile = ",logFile) + # Command line + #import toolbox.pyutils as pyutils + # -nwni = génération de la db, mais pas de génération de figure (nécessite l'affichage) + # -nw = génération de la db, & génération des figures en background + # Argument "-nw" is no longer supported since Scilab 6.0.2. + # scilab -nw starts WScilex-cli.exe: Scilab CLI with full functionnalities. + #cmd = '"%s" -e "%s" > "%s" 2>&1' % (scilabExe, sciCmd, logFile) + cmd = '"%s" -nw -e "%s" > "%s" 2>&1' % (scilabExe, sciCmd, logFile) + if verb : + print ('subprocess command : ', cmd) + # acquire sciLock + tim0 = time.time() + sciLock.acquire() + try : + print ("Running Scilab...") + import subprocess + scilabProcess = subprocess.call(cmd, shell=True) + print ("Running Scilab... Done") + a = 1.0 + except : + # fonction objectif doit retourner un double + print ("problem during Scilab run") + a = 0.0 + # release sciLock + sciLock.release() + print (" Scilab exec time = %d sec" %(time.time()-tim0)) + return a +#================================================================================= +#================================================================================= def execGhostScript(gsExe, inFilter = '*.eps', device='png256', res=300): import subprocess, os, time tim0 = time.time() diff --git a/postProLoopGui.pyw b/postProLoopGui.pyw index 09ae70f83d1d7acb5435e21d1ef14767a182c7a3..8eab7ebd5e13098242eb7d9c5213f2dbbd1a7ad0 100755 --- a/postProLoopGui.pyw +++ b/postProLoopGui.pyw @@ -47,6 +47,9 @@ class PostProLoopGui(QWidget): # | Matlab : | # | - options | # |--------------------------------| + # | Scilab : | + # | - options | + # |--------------------------------| # | GhostScript : | # | - options | # |--------------------------------| @@ -105,43 +108,56 @@ class PostProLoopGui(QWidget): self.sf['MATLABCMD'] = TextLine (self, grplay2, self.postProLoop.pars['MATLABCMD'], 2, 0, 4) self.sf['MATLABPATH'] = PathLine (self, grplay2, self.postProLoop.pars['MATLABPATH'], 3, 0, 4) self.sf['MATLABREQUEST'] = TextLine (self, grplay2, self.postProLoop.pars['MATLABREQUEST'], 4, 0, 4) - - #GhostScript box - self.mesherGrpBox = QGroupBox("GhostScript (eps -> png)") + + #Scilab box + self.mesherGrpBox = QGroupBox("Scilab") box.addWidget(self.mesherGrpBox) grplay3 = QGridLayout() grplay3.setColumnStretch(2,1) self.mesherGrpBox.setLayout(grplay3) - self.sf['GSRUN'] = CheckBoxLine(self, grplay3, self.postProLoop.pars['GSRUN'], 0, 0) - self.sf['GSEXE'] = ExeFileLine (self, grplay3, self.postProLoop.pars['GSEXE'], exeFileType, 1, 0, 4) - self.sf['GSFILTER'] = TextLine (self, grplay3, self.postProLoop.pars['GSFILTER'], 2, 0, 1) - self.sf['GSOUTPUTFORMAT'] = MultiPMRLine(self, grplay3, self.postProLoop.pars['GSOUTPUTFORMAT'],3, 0) - self.sf['GSDEFINITION'] = TextLine (self, grplay3, self.postProLoop.pars['GSDEFINITION'], 3, 3, 1, QIntValidator(72,1800)) - self.sf['GSREQUEST'] = TextLine (self, grplay3, self.postProLoop.pars['GSREQUEST'], 4, 0, 1) - - #build Latex box - self.mesherGrpBox = QGroupBox("Python") + self.sf['SCILABRUN'] = CheckBoxLine(self, grplay3, self.postProLoop.pars['SCILABRUN'], 0, 0) + self.sf['SCILABEXE'] = ExeFileLine (self, grplay3, self.postProLoop.pars['SCILABEXE'], exeFileType, 1, 0, 4) + self.sf['SCILABCMD'] = TextLine (self, grplay3, self.postProLoop.pars['SCILABCMD'], 2, 0, 4) + self.sf['SCILABPATH'] = PathLine (self, grplay3, self.postProLoop.pars['SCILABPATH'], 3, 0, 4) + self.sf['SCILABREQUEST'] = TextLine (self, grplay3, self.postProLoop.pars['SCILABREQUEST'], 4, 0, 4) + + #GhostScript box + self.mesherGrpBox = QGroupBox("GhostScript (eps -> png)") box.addWidget(self.mesherGrpBox) grplay4 = QGridLayout() grplay4.setColumnStretch(2,1) self.mesherGrpBox.setLayout(grplay4) - self.sf['PYTHONRUN'] = CheckBoxLine(self, grplay4, self.postProLoop.pars['PYTHONRUN'], 0, 0) - self.sf['PYTHONMODULE'] = FileLine (self, grplay4, self.postProLoop.pars['PYTHONMODULE'], '*.py', 1, 0, 4) - self.sf['PYTHONSCRIPT'] = TextLine (self, grplay4, self.postProLoop.pars['PYTHONSCRIPT'], 2, 0, 4) - self.sf['PYTHONREQUEST'] = TextLine (self, grplay4, self.postProLoop.pars['PYTHONREQUEST'], 3, 0, 4) - ''' + self.sf['GSRUN'] = CheckBoxLine(self, grplay4, self.postProLoop.pars['GSRUN'], 0, 0) + self.sf['GSEXE'] = ExeFileLine (self, grplay4, self.postProLoop.pars['GSEXE'], exeFileType, 1, 0, 4) + self.sf['GSFILTER'] = TextLine (self, grplay4, self.postProLoop.pars['GSFILTER'], 2, 0, 1) + self.sf['GSOUTPUTFORMAT'] = MultiPMRLine(self, grplay4, self.postProLoop.pars['GSOUTPUTFORMAT'],3, 0) + self.sf['GSDEFINITION'] = TextLine (self, grplay4, self.postProLoop.pars['GSDEFINITION'], 3, 3, 1, QIntValidator(72,1800)) + self.sf['GSREQUEST'] = TextLine (self, grplay4, self.postProLoop.pars['GSREQUEST'], 4, 0, 1) + #build Latex box - self.mesherGrpBox = QGroupBox("Latex") + self.mesherGrpBox = QGroupBox("Python") box.addWidget(self.mesherGrpBox) grplay5 = QGridLayout() grplay5.setColumnStretch(2,1) self.mesherGrpBox.setLayout(grplay5) - self.sf['LATEXRUN'] = CheckBoxLine(self, grplay5, self.postProLoop.pars['LATEXRUN'], 0, 0) - self.sf['LATEXCMD'] = TextLine (self, grplay5, self.postProLoop.pars['LATEXCMD'], 1, 0, 4) - self.sf['LATEXREQUEST'] = TextLine (self, grplay5, self.postProLoop.pars['LATEXREQUEST'], 2, 0, 4) + self.sf['PYTHONRUN'] = CheckBoxLine(self, grplay5, self.postProLoop.pars['PYTHONRUN'], 0, 0) + self.sf['PYTHONMODULE'] = FileLine (self, grplay5, self.postProLoop.pars['PYTHONMODULE'], '*.py', 1, 0, 4) + self.sf['PYTHONSCRIPT'] = TextLine (self, grplay5, self.postProLoop.pars['PYTHONSCRIPT'], 2, 0, 4) + self.sf['PYTHONREQUEST'] = TextLine (self, grplay5, self.postProLoop.pars['PYTHONREQUEST'], 3, 0, 4) + ''' + #build Latex box + self.mesherGrpBox = QGroupBox("Latex") + box.addWidget(self.mesherGrpBox) + grplay6 = QGridLayout() + grplay6.setColumnStretch(2,1) + self.mesherGrpBox.setLayout(grplay6) + + self.sf['LATEXRUN'] = CheckBoxLine(self, grplay6, self.postProLoop.pars['LATEXRUN'], 0, 0) + self.sf['LATEXCMD'] = TextLine (self, grplay6, self.postProLoop.pars['LATEXCMD'], 1, 0, 4) + self.sf['LATEXREQUEST'] = TextLine (self, grplay6, self.postProLoop.pars['LATEXREQUEST'], 2, 0, 4) ''' def buildButtonFrame(self, box):