diff --git a/cfg/warson/intelCommunity.bashrc b/cfg/warson/intelCommunity.bashrc index 2d14ff92dd8decb05ab870de1b83467ec9634c83..06b19829f74c80dfdd976ee5101827abd29d4a99 100644 --- a/cfg/warson/intelCommunity.bashrc +++ b/cfg/warson/intelCommunity.bashrc @@ -6,3 +6,4 @@ if [ -d /opt/intel ] ; then . /opt/intel/mkl/bin/mklvars.sh intel64 . /opt/intel/tbb/bin/tbbvars.sh intel64 fi +export MKL_DEBUG_CPU_TYPE=5 diff --git a/cfg/warson/intelCommunity.profile b/cfg/warson/intelCommunity.profile index b7ff6515f7b2e9fec9c46c006d25d042fdc70f4b..3e1712b61b2a5ce6663f92f7e136e05e370bb2fe 100644 --- a/cfg/warson/intelCommunity.profile +++ b/cfg/warson/intelCommunity.profile @@ -7,4 +7,5 @@ if [ -n "$BASH_VERSION" ]; then . /opt/intel/mkl/bin/mklvars.sh intel64 . /opt/intel/tbb/bin/tbbvars.sh intel64 fi -fi \ No newline at end of file +fi +export MKL_DEBUG_CPU_TYPE=5 diff --git a/externalProgramPathGui.pyw b/externalProgramPathGui.pyw index 8c5f8054473540efa2c8e834304f21aaa4aaa8d8..989470f3c5ba9d84bc3b92416144802109ed4177 100755 --- a/externalProgramPathGui.pyw +++ b/externalProgramPathGui.pyw @@ -5,23 +5,17 @@ ## Qt ## from __future__ import print_function -foundQt=0 try: - from PyQt4.QtCore import * - from PyQt4.QtGui import * - foundQt=4 -except: - pass - -try: - from PyQt5.QtCore import * - from PyQt5.QtGui import * - from PyQt5.QtWidgets import * - foundQt=5 -except: - pass -if not foundQt: - raise Exception("PyQt4/5 not found!") + from PySide2.QtCore import * + from PySide2.QtGui import * + from PySide2.QtWidgets import * +except: + try: + from PyQt5.QtCore import * + from PyQt5.QtGui import * + from PyQt5.QtWidgets import * + except: + raise Exception("PyQt5/PySide2 not found!") #print "PyQt%d (Qt %s) loaded!" % (foundQt, QT_VERSION_STR) diff --git a/launch.py b/launch.py index f884d57b2f3dc333e57e8241ff93d611e62b4199..9a042f41048a7bfebe3aa20ed6526d25398fa9d2 100755 --- a/launch.py +++ b/launch.py @@ -33,6 +33,7 @@ class LaunchJob(ParametricJob): TextPRM(self.pars, 'MAIL_ADDR', 'e-mail address (reports)', os.getenv('USER')) TextPRM(self.pars, 'SMTP_SERV', 'SMTP email server', 'smtp.ulg.ac.be') + TextPRM(self.pars, 'PYTHONEXE', 'Python executable', sys.executable) mtfExe = os.path.abspath(os.path.dirname(__file__))+os.sep+'Metafor' if (not isUnix()): mtfExe = mtfExe+'.exe' @@ -78,19 +79,20 @@ class LaunchJob(ParametricJob): # Actions PRMAction(self.actions, 'a', self.pars['MAIL_ADDR']) - PRMAction(self.actions, 'b', self.pars['EXEC_NAME']) - PRMAction(self.actions, 'c', self.pars['TEST_NAME']) - PRMAction(self.actions, 'c', self.pars['TEST_DIR']) - PRMAction(self.actions, 'd', self.pars['OUTFILE']) - - PRMAction(self.actions, 'e', self.pars['ALGORITHM']) - PRMAction(self.actions, 'f', self.pars['RESTART_STEP']) - PRMAction(self.actions, 'g', self.pars['MULTITEST']) - - PRMAction(self.actions, 'h', self.pars['NICE_VALUE']) - PRMAction(self.actions, 'i', self.pars['AFFINITY']) - PRMAction(self.actions, 'j', self.pars['NB_TASKS']) - PRMAction(self.actions, 'k', self.pars['NB_THREADS']) + PRMAction(self.actions, 'b', self.pars['PYTHONEXE']) + PRMAction(self.actions, 'c', self.pars['EXEC_NAME']) + PRMAction(self.actions, 'd', self.pars['TEST_NAME']) + PRMAction(self.actions, 'd', self.pars['TEST_DIR']) + PRMAction(self.actions, 'e', self.pars['OUTFILE']) + + PRMAction(self.actions, 'f', self.pars['ALGORITHM']) + PRMAction(self.actions, 'g', self.pars['RESTART_STEP']) + PRMAction(self.actions, 'h', self.pars['MULTITEST']) + + PRMAction(self.actions, 'i', self.pars['NICE_VALUE']) + PRMAction(self.actions, 'j', self.pars['AFFINITY']) + PRMAction(self.actions, 'k', self.pars['NB_TASKS']) + PRMAction(self.actions, 'l', self.pars['NB_THREADS']) PRMAction(self.actions, 'm', self.pars['RUNMETHOD']) # At parameters PRMAction(self.actions, 'n', self.pars['AT_TIME']) @@ -232,16 +234,18 @@ class LaunchJob(ParametricJob): if not os.path.isdir(self.pars['TEST_DIR'].val): print("Error: 'TEST_DIR' %s non existant directory" % self.pars['TEST_DIR'].val) return - asciiname = self.pars['TEST_DIR'].val.encode('ascii','ignore') # convert unicode (from PyQt) - outRun = self.startMultipleTests(asciiname) + #asciiname = self.pars['TEST_DIR'].val.encode('ascii','ignore') # convert unicode (from PyQt) + #outRun = self.startMultipleTests(asciiname) + outRun = self.startMultipleTests(self.pars['TEST_DIR'].val) else: #check if not os.path.isfile(self.pars['TEST_NAME'].val): print("Error: 'TEST_NAME' %s non existant file" % self.pars['TEST_NAME'].val) return #run - asciiname = self.pars['TEST_NAME'].val.encode('ascii','ignore') # convert unicode (from PyQt) - outRun = self.startMultipleTests(asciiname) + #asciiname = self.pars['TEST_NAME'].val #.encode('ascii','ignore') # convert unicode (from PyQt) + #outRun = self.startMultipleTests(asciiname) + outRun = self.startMultipleTests(self.pars['TEST_NAME'].val) ''' if (self.pars['ALGORITHM'].val == "restart" && self.pars['RESTART_STEP'].val > 0): outRun = self.startSingleTest() @@ -302,14 +306,15 @@ class LaunchJob(ParametricJob): print("starting Multiple test at %s (come back later)" % now.ctime()) # opening outfile - self.outFile = open(self.getOutFileName(),"w") - mtfdir, mtfexe = os.path.split(self.pars['EXEC_NAME'].val.encode('ascii','ignore')) + self.outFile = open(self.getOutFileName(),"w") + mtfdir, mtfexe = os.path.split(self.pars['EXEC_NAME'].val) + #mtfdir, mtfexe = os.path.split(self.pars['EXEC_NAME'].val.encode('ascii','ignore')) mtfdir = os.path.abspath(mtfdir) # necessaire pour sge sinon, en local disk, soucis pour trouver libGen4.so # starting python battery if self.launchGui: #self.launchGui.outFile=outfile # starting process (unable to renice it => nice in battery) - prog = 'python' + prog = self.pars['PYTHONEXE'].val # python args -u : unbuffered output (to have output synchronized to output) # -i : force a prompt event even if stdin is not a terminal (else it is not possible to write cmds to python) arg = ['-u', '-i'] @@ -320,7 +325,7 @@ class LaunchJob(ParametricJob): else: #cmd = self.getNiceCmd(int(self.pars['NICE_VALUE'].val)) #cmd = cmd + ['python'] - cmd = ['python'] + cmd = [self.pars['PYTHONEXE'].val] if isUnix(): # shell=False && sans close_fds = True (ca freeze) #Add mtfdir to LD_LIBRARY_PATH to allow launch to find mt*.so if 'LD_LIBRARY_PATH' in os.environ: @@ -335,71 +340,76 @@ class LaunchJob(ParametricJob): pin = p.stdin # filling command to battery - pin.write('import sys, os, os.path\n') + pin.write(b'import sys, os, os.path\n') if self.debug: - pin.write('print "sys.path = ", sys.path\n') - pin.write('print "os.getcwd() = ", os.getcwd()\n') + pin.write(b'print ("sys.path = ", sys.path)\n') + pin.write(b'print ("os.getcwd() = ", os.getcwd())\n') #pin.write("raw_input()\n") - pin.write('if os.path.isdir(r"%s"):\n'%mtfdir) - pin.write('\tsys.path.append(r"%s")\n'%mtfdir) # mtfdir est dorenavant un abspath + print ("mtfdir = ", mtfdir) + print ("type mtfdir = ", type(mtfdir)) + pin.write(('if os.path.isdir(r"%s"):\n'%mtfdir).encode('utf-8')) + #pin.write(('if os.path.isdir(r"%s"):\n'%mtfdir)) + pin.write(('\tsys.path.append(r"%s")\n'%mtfdir).encode('utf-8')) # mtfdir est dorenavant un abspath + #pin.write(('\tsys.path.append(r"%s")\n'%mtfdir)) # mtfdir est dorenavant un abspath #pin.write('\tsys.path.append(os.path.abspath(r"%s"))\n'%mtfdir) - pin.write('else:\n') - pin.write('\tprint "metafor dir %s not found!"\n'%mtfdir) - pin.write('\tsys.exit()\n\n') - pin.write('execfile(r"%s")\n'%os.path.join(mtfdir,'.pythonrc.py')) - pin.write('import toolbox.battery as b\n') - pin.write('battery = b.Battery() \n') - pin.write('battery.keepFacs = True\n') - pin.write('battery.dirs = [r"%s"]\n'%tests) + pin.write(b'else:\n') + pin.write(('\tprint ("metafor dir %s not found!")\n'%mtfdir).encode('utf-8')) + pin.write(b'\tsys.exit()\n\n') + pin.write(('exec(open(r"%s").read())\n'%os.path.join(mtfdir,'.pythonrc.py')).encode('utf-8')) + #pin.write(('execfile(r"%s")\n'%os.path.join(mtfdir,'.pythonrc.py')).encode()) + pin.write(b'import toolbox.battery as b\n') + pin.write(b'battery = b.Battery() \n') + pin.write(b'battery.keepFacs = True\n') + pin.write(('battery.dirs = [r"%s"]\n'%tests).encode('utf-8')) if (self.pars['ALGORITHM'].val == "execfile"): reg1=r"(.+)_0*([1-9][0-9]*)\.py" exp1= re.compile(reg1) m = exp1.match(os.path.basename(tests)) if m: # chaining tests - pin.write('battery.addCplxExecPath(r"%s_*")\n'%os.path.join(os.path.dirname(tests), m.group(1))) + pin.write(('battery.addCplxExecPath(r"%s_*")\n'%os.path.join(os.path.dirname(tests), m.group(1))).encode('utf-8')) print('battery.cplx_exec = [r"%s_*"]\n'%os.path.join(os.path.dirname(tests), m.group(1))) else: - pin.write('battery.addCplxExecPath(r"%s")\n'%tests) + pin.write(('battery.addCplxExecPath(r"%s")\n'%tests).encode('utf-8')) print('battery.cplx_exec = [r"%s"]\n'%tests) elif (self.pars['ALGORITHM'].val == "import" ): - pin.write('battery.addCplxImportPath(r"%s")\n'%tests) + pin.write(('battery.addCplxImportPath(r"%s")\n'%tests).encode('utf-8')) print('battery.cplx_import = [r"%s"]\n'%tests) elif (self.pars['ALGORITHM'].val == "restart" ): - pin.write('battery.addRestartPath(r"%s")\n'%tests) + pin.write(('battery.addRestartPath(r"%s")\n'%tests).encode('utf-8')) print('battery.restart = [r"%s"]\n'%tests) - pin.write('battery.verifsrc = "verif"\n') - pin.write('battery.codes = [ "FAILED", "STP", "ITE", "INW", "EXT", "EXW", "LKS", "CPU", "MEM" ]\n') + pin.write(b'battery.verifsrc = "verif"\n') + pin.write(b'battery.codes = [ "FAILED", "STP", "ITE", "INW", "EXT", "EXW", "LKS", "CPU", "MEM" ]\n') if ((self.pars['RUNMETHOD'].val == 'sge' or self.pars['RUNMETHOD'].val == 'slurm') and self.pars['LOCALDISK'].val == True): - pin.write('battery.setWDRoot("%s")\n'%self.getLocalDiskDir(self.jobId)) + pin.write(('battery.setWDRoot("%s")\n'%self.getLocalDiskDir(self.jobId)).encode('utf-8')) if self.pars['RUNMETHOD'].val != 'sge' and self.pars['RUNMETHOD'].val != 'slurm': if self.pars['AFFINITY'].val != '': - pin.write('battery.setAffinity("%s")\n'%self.pars['AFFINITY'].val) + pin.write(('battery.setAffinity("%s")\n'%self.pars['AFFINITY'].val).encode('utf-8')) if self.pars['NICE_VALUE'].val != '0': - #print 'battery.setNice(%s)\n'%self.pars['NICE_VALUE'].val - pin.write('battery.setNice(%s)\n'%self.pars['NICE_VALUE'].val) + #print ('battery.setNice(%s)\n'%self.pars['NICE_VALUE'].val) + pin.write(('battery.setNice(%s)\n'%self.pars['NICE_VALUE'].val).encode('utf-8')) - pin.write('battery.setNumTasks(%s)\n'%self.pars['NB_TASKS'].val) - pin.write('battery.setNumThreads(%s)\n'%self.pars['NB_THREADS'].val) - pin.write('battery.mtfdir = r"%s"\n'%mtfdir) + pin.write(('battery.setNumTasks(%s)\n'%self.pars['NB_TASKS'].val).encode('utf-8')) + pin.write(('battery.setNumThreads(%s)\n'%self.pars['NB_THREADS'].val).encode('utf-8')) + pin.write(('battery.mtfdir = r"%s"\n'%mtfdir).encode('utf-8')) if self.pars['ALGORITHM'].val == 'clean': - pin.write('battery.start("clean")\n') + pin.write(b'battery.start("clean")\n') elif self.pars['ALGORITHM'].val == 'verif': - pin.write('battery.verif()\n') + pin.write(b'battery.verif()\n') else: - pin.write('battery.start("run")\n') + pin.write(b'battery.start("run")\n') #pin.write('battery.verif()\n') # pas très utile dans le cadre de launch ou faudrait faire un verif + malin) # write to exit python at the end of job - pin.write('quit()\n') + pin.write(b'quit()\n') # wait for process to finish if self.launchGui: retcode = self.launchGui.waitQProcessForFinish() - #print "Qprocess finished with retcode: ",retcode + #print ("Qprocess finished with retcode: ",retcode) else: #close pin flux pin.close() diff --git a/launchGui.pyw b/launchGui.pyw index 936fa7c2f29dbe7c6e8dc2d83311cb215aec57b7..fe29410b2a0ddac459cdbd32da48b0b98dadab6d 100755 --- a/launchGui.pyw +++ b/launchGui.pyw @@ -327,26 +327,15 @@ class LaunchGui(QWidget): for var in self.sf: self.sf[var].setEnabled(self.launch.pars[var].enabled) - @pyqtSlot() + #@pyqtSlot() def readStdOutput(self): - out = self.process.readAllStandardOutput() - ''' - if self.launch.outFile: - self.launch.outFile.write(repr(out)) - self.launch.outFile.write("\n") - ''' - if foundQt==4: - out = QString(out) - else: - out = str(out).encode('utf8') - ''' - if self.launch.outFile: - self.launch.outFile.write(repr(out)) - self.launch.outFile.write("\n") - ''' + out = self.process.readAllStandardOutput() + out = bytes(out.data()) + out = out.decode() out = out.replace('>>> >>> ... ... ... ... ... >>>','') out = out.replace('>>> ','') out = out.replace('\r\n','\n') + self.write(out) #self.console.append(QString(out)) ''' diff --git a/parametricJob.py b/parametricJob.py index f351a8a9339c34ae693407f2277d05a4cde4dd8c..141018bbd8b6efe46982d933f26fbf0e9c449c9d 100644 --- a/parametricJob.py +++ b/parametricJob.py @@ -265,18 +265,39 @@ class ParametricJob(PRMSet): # AT/BATCH SPECIFIC def runBatch(self): # get guess profile - cfgfile = self.guessProfile() + cfgfile = self.guessProfile() + cfgFileName, cfgFileExtension = os.path.splitext(self.cfgfile) + import re + m = re.compile(cfgFileName+'([0-9]+)\\'+cfgFileExtension) + #print (cfgFileName+'([0-9]+)\\'+cfgFileExtension) + launchId = 0 + #print (os.listdir('.')) + for fn in os.listdir('.'): + #print ("fn = ", fn) + out = m.search(fn) + #print (out) + if out : + outId = int(out.group(1)) + if outId > launchId : + launchId = outId + + launchId += 1 + print ("launchId =", launchId) + os.system("cp %s %s%s%s"%(self.cfgfile, cfgFileName, launchId, cfgFileExtension)) + # build script - scriptname="runbatch.sh" + scriptname="runbatch%d.sh"%launchId file = open(scriptname,"w") file.write("#!/bin/bash\n") # this avoids /bin/sh when sh=dash file.write(". %s\n" % cfgfile) - file.write("echo `atq`\n") - file.write("jobId=`atq | awk '{if ($1>jobId)jobId=$1} END {print jobId}'`\n") - file.write("echo \"at JobId = $jobId\"\n") - file.write('%s -x -i $jobId -d "%s"\n' % (sys.argv[0], os.getcwd()) ) + #file.write("echo `atq`\n") + #file.write("jobId=`atq | awk '{if ($1>jobId)jobId=$1} END {print jobId}'`\n") + #file.write("echo \"at JobId = $jobId\"\n") + #file.write('%s -x -i $jobId -d "%s"\n' % (sys.argv[0], os.getcwd()) ) + file.write('%s -x -i %d -d "%s"\n' % (sys.argv[0], launchId, os.getcwd()) ) file.close() os.chmod(scriptname,0o700) + print("starting script in batch mode: %s" % scriptname) #shcmd="at %s -f %s" % (self.pars['BATCHTIME'].val, scriptname) if self.pars['RUNMETHOD'].val == "at" : @@ -300,8 +321,8 @@ class ParametricJob(PRMSet): batchId = m.group(1) #print m.group if m: - cfgFileName, cfgFileExtension = os.path.splitext(self.cfgfile) - os.system("cp %s %s%s%s"%(self.cfgfile, cfgFileName, batchId, cfgFileExtension)) + #cfgFileName, cfgFileExtension = os.path.splitext(self.cfgfile) + #os.system("cp %s %s%s%s"%(self.cfgfile, cfgFileName, batchId, cfgFileExtension)) self.atrmScript(batchId) print("\tuse 'atq' and find job number %s to check the status of your job" % batchId) print("\t\t - 'a' means waiting in the queue 'a'") diff --git a/postProLoopGui.pyw b/postProLoopGui.pyw index 9dd2609deab122cc94e88975c930f2f9a0e3180e..ef1b5d097eaae753581b4026ae20de24d11c7011 100755 --- a/postProLoopGui.pyw +++ b/postProLoopGui.pyw @@ -8,27 +8,19 @@ ## Qt ## from __future__ import print_function -foundQt=0 try: - from PyQt4.QtCore import * - from PyQt4.QtGui import * - foundQt=4 -except: - pass - -try: - from PyQt5.QtCore import * - from PyQt5.QtGui import * - from PyQt5.QtWidgets import * - foundQt=5 -except: - pass -if not foundQt: - raise Exception("PyQt4/5 not found!") + from PySide2.QtCore import * + from PySide2.QtGui import * + from PySide2.QtWidgets import * +except: + try: + from PyQt5.QtCore import * + from PyQt5.QtGui import * + from PyQt5.QtWidgets import * + except: + raise Exception("PyQt5/PySide2 not found!") #print "PyQt%d (Qt %s) loaded!" % (foundQt, QT_VERSION_STR) - - from prmClassesGui import * from postProLoop import * diff --git a/prmClasses.py b/prmClasses.py index 1578916a16416947c4274027af2d8cff03569aa6..a20a80138c6f504d7e58e32d34e6cdec4733f617 100644 --- a/prmClasses.py +++ b/prmClasses.py @@ -268,7 +268,7 @@ class _GetchWindows(object): import msvcrt def __call__(self): import msvcrt - return msvcrt.getch() + return msvcrt.getch().decode() # -- variable globale -- getch = _Getch() diff --git a/prmClassesGui.py b/prmClassesGui.py index ad2743caa468c16788c0d7a143d733da9226d068..847ed65973992ae3a822fd0cd860daa6bac54cd6 100644 --- a/prmClassesGui.py +++ b/prmClassesGui.py @@ -9,24 +9,20 @@ from builtins import object import os,sys ## Qt ## -foundQt=0 -coding='latin-1' +#coding='latin-1' +coding='utf-8' try: - from PyQt4.QtCore import * - from PyQt4.QtGui import * - foundQt=4 -except: - pass + from PySide2.QtCore import * + from PySide2.QtGui import * + from PySide2.QtWidgets import * +except: + try: + from PyQt5.QtCore import * + from PyQt5.QtGui import * + from PyQt5.QtWidgets import * + except: + raise Exception("PyQt5/PySide2 not found!") -try: - from PyQt5.QtCore import * - from PyQt5.QtGui import * - from PyQt5.QtWidgets import * - foundQt=5 -except: - pass -if not foundQt: - raise Exception("PyQt4/5 not found!") #print "PyQt%d (Qt %s) loaded!" % (foundQt, QT_VERSION_STR) import distutils.spawn @@ -84,10 +80,8 @@ class TextLine(PRMLine): self.setEnabled(self.param.enabled) def action(self): - if foundQt==4: - self.param.val = self.lineEdt.text().toLatin1().data() - else: - self.param.val = self.lineEdt.text().encode(coding) + #self.param.val = self.lineEdt.text().encode(coding) + self.param.val = self.lineEdt.text() #print opt.key,'=',opt.val # update widgets visibility according to enable/disable self.win.updateWidgetsVisibility() @@ -132,13 +126,11 @@ class PathLine(PRMLine): def action(self, dir): if dir: - if foundQt==4: - self.param.val = dir.toLatin1().data().replace('/',os.sep) - self.lineEdt.setText(dir) - else: - #print "PathLine.action:dir=", dir - self.param.val = dir.encode(coding).replace('/',os.sep) - self.lineEdt.setText(self.param.val.decode(coding)) + #print "PathLine.action:dir=", dir + #self.param.val = dir.encode(coding).replace('/',os.sep) + self.param.val = dir.replace('/',os.sep) + #self.lineEdt.setText(self.param.val.decode(coding)) + self.lineEdt.setText(self.param.val) #print self.param.key,'=',self.param.val # update widgets visibility according to enable/disable self.checkValidity() @@ -195,17 +187,14 @@ class FileLine(PRMLine): def btAction(self): file = QFileDialog.getOpenFileName(self.win, "Choose %s file" % self.param.key, self.param.val, self.fileType) - if foundQt>4: file=file[0] # en PyQt5 retourne (filename, filter) - self.action(file) + self.action(file[0]) # en PyQt5 retourne (filename, filter) def action(self, file): if file: - if foundQt==4: - self.param.val = file.toLatin1().data().replace('/', os.sep) - self.lineEdt.setText(file) - else: - self.param.val = file.encode(coding).replace('/', os.sep) - self.lineEdt.setText(self.param.val.decode(coding)) + #self.param.val = file.encode(coding).replace('/', os.sep) + self.param.val = file.replace('/', os.sep) + #self.lineEdt.setText(self.param.val.decode(coding)) + self.lineEdt.setText(self.param.val) #print "FileLine.action:", self.param.key,'=',self.param.val self.checkValidity() # update widgets visibility according to enable/disable @@ -269,10 +258,8 @@ class MultiPMRLine(PRMLine): self.setEnabled(self.param.enabled) def action(self): - if foundQt==4: - self.param.val = self.comboBox.currentText().toLatin1().data() - else: - self.param.val = self.comboBox.currentText().encode(coding) + #self.param.val = self.comboBox.currentText().encode(coding) + self.param.val = self.comboBox.currentText() #print self.param.val self.win.updateWidgetsVisibility() self.win.updateWidgetsValues() @@ -316,11 +303,9 @@ class MultiPathLine(PRMLine): def cbIndexChangeAction(self): dir = self.comboBox.currentText() - if foundQt==4: - val = dir.toLatin1().data().replace('/',os.sep) - else: - #print "cbIndexChangeAction:dir=",dir - val = dir.encode(coding).replace('/',os.sep) + #print "cbIndexChangeAction:dir=",dir + #val = dir.encode(coding).replace('/',os.sep) + val = dir.replace('/',os.sep) self.param.val = val if val in self.param.vals: # bidouille pour que la nouvelle valeur soit unique et toujours en premiere position self.param.vals.remove(val) @@ -364,7 +349,8 @@ class MultiPathLine(PRMLine): self.win.updateWidgetsValues() def setParamValue(self): - idx = self.comboBox.findText(self.param.val.decode(coding)) + #idx = self.comboBox.findText(self.param.val.decode(coding)) + idx = self.comboBox.findText(self.param.val) self.comboBox.setCurrentIndex(idx) def setEnabled(self, enable):