Here are some tips I wrote for using mel's python command to call a multiple parameter python function, it may come in handy for things like using a mel based user interface but then calling a python function on a button click. Hope the ideas are helpful.
Cheers,
Nate
//and to use in mel, source test.mel, something like
mel_foo("Great Day",{"It","Compiled","Okay"});
//result
mel_foo("Great Day",{"It","Compiled","Okay"});
Great Day
['It', 'Compiled', 'Okay']
#test.py import maya.cmds as cmds def foo( arg1 = '', arg2 = [] ): print arg1 print arg2 cmds.polyCube()
//test.mel
//with something like these three MEL utilities //return string, pad(string) this changes a string-- a to 'a' global proc string pad(string $arg) { return ("'"+$arg+"'"); } //return string[], padArray(string[]) this changes a string[]-- {a} to {'a'} global proc string[] padArray(string $arg[]) { string $result[] = {}; for($i = 0; $i < size($arg); $i++ ){ $result[size($result)] = pad($arg[$i]); } return $result; } //return string, arrayToPyList(string[]) this changes a string []-- {"a","b"} to "['a', 'b']" global proc string arrayToPyList(string $arg[]) { return "["+stringArrayToString($arg,",")+"]"; } // //we can have something like // //test.mel global proc mel_foo (string $a, string $array[] ) { string $pyModule = "testPy"; //this is the python function we want to call // string $def = "foo"; //call a python command from mel //It helps us find the def foo .. see below string $importCmd = "from "+$pyModule+" "+"import "+$def; python $importCmd; //making arguments in a form that python can use // string $aPadded = pad($a); string $arrayPadded[] = padArray($array); //there are quite a few pluses here //but the pluses are just gluing the string together //to get something like //foo( 'a', ['b1','b2',…] ) // string $pyCmd = $def+" "+"("+ "arg1="+$aPadded+","+ "arg2="+arrayToPyList($arrayPadded) +")"; python $pyCmd; }