From: Neil B. <nei...@zi...> - 2006-12-04 21:19:34
|
Hello, I am trying to evaluate a script which runs as follows (using both BSF and JYthonInterp does the same thing): --- String strScript = "def test():\n"; strScript += "\treturn 1\n"; strScript += "test()"; Object objResult = objInterp.eval(strScript); --- However I get the following traceback (this is when run from JythonInterp), I've snipped the bottom bit off because it is in the unit test code Traceback (innermost last): (no code object) at line 0 SyntaxError: ('invalid syntax', ('<string>', 1, 1, 'def test():')) at org.python.core.parser.fixParseError(parser.java) at org.python.core.parser.parse(parser.java) at org.python.core.Py.compile_flags(Py.java) at org.python.core.Py.compile_flags(Py.java) at org.python.core.__builtin__.eval(__builtin__.java) at org.python.core.__builtin__.eval(__builtin__.java) at org.python.util.PythonInterpreter.eval(PythonInterpreter.java) at uk.co.ziath.datapaq.server.scripting.JythonScriptProcessor.evaluateScrip t(JythonScriptProcessor.java:76) at uk.co.ziath.datapaq.server.scripting.test.JythonScriptProcessorTest.test MethodJythonScript(JythonScriptProcessorTest.java:75) <snip> --- When I attempt to run a simple script such as 3* 4 and evaluate it, I get back 12 as I would expect. However it seems that any multi-line script fails on me. Is it true that I cannot use a multi-line script in an evaluate statement (I know I can do it in an execute statement)? Thanks for your help. Cheers, Neil --- Neil Benn CEO Ziath Ltd http://www.ziath.com |
From: Leo U. <leo...@ya...> - 2006-12-04 21:34:41
|
blows up in Jython and Python for me. :) leouser --- Neil Benn <nei...@zi...> wrote: > Hello, > > I am trying to evaluate a script which > runs as follows > (using both BSF and JYthonInterp does the same > thing): > > --- > > String strScript = "def test():\n"; > strScript += "\treturn 1\n"; > strScript += "test()"; > > Object objResult = objInterp.eval(strScript); > > --- > > However I get the following traceback (this is when > run from > JythonInterp), I've snipped the bottom bit off > because it is in the unit > test code > > Traceback (innermost last): > (no code object) at line 0 > SyntaxError: ('invalid syntax', ('<string>', 1, 1, > 'def test():')) > > at > org.python.core.parser.fixParseError(parser.java) > at > org.python.core.parser.parse(parser.java) > at > org.python.core.Py.compile_flags(Py.java) > at > org.python.core.Py.compile_flags(Py.java) > at > org.python.core.__builtin__.eval(__builtin__.java) > at > org.python.core.__builtin__.eval(__builtin__.java) > > at > org.python.util.PythonInterpreter.eval(PythonInterpreter.java) > at > uk.co.ziath.datapaq.server.scripting.JythonScriptProcessor.evaluateScrip > t(JythonScriptProcessor.java:76) > at > uk.co.ziath.datapaq.server.scripting.test.JythonScriptProcessorTest.test > MethodJythonScript(JythonScriptProcessorTest.java:75) > <snip> > > --- > > When I attempt to run a simple script > such as 3* 4 and > evaluate it, I get back 12 as I would expect. > However it seems that any > multi-line script fails on me. Is it true that I > cannot use a > multi-line script in an evaluate statement (I know I > can do it in an > execute statement)? > > Thanks for your help. > > Cheers, > > Neil > > > --- > Neil Benn > CEO Ziath Ltd > http://www.ziath.com > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get > the chance to share your > opinions on IT & business topics through brief > surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV> _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > ____________________________________________________________________________________ Do you Yahoo!? Everyone is raving about the all-new Yahoo! Mail beta. http://new.mail.yahoo.com |
From: Oti <oh...@gm...> - 2006-12-04 21:48:31
|
Neil, use Object objResult = objInterp.exec(strScript); Please read about exec() here: http://www.python.org/doc/2.3.5/ref/exec.html And eval(), from the CPython documentation (http://www.python.org/doc/2.3/lib/built-in-funcs.html): eval( expression[, globals[, locals]]) The arguments are a string and two optional dictionaries. The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local name space. If the globals dictionary is present and lacks '__builtins__', the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard __builtin__ module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example: >>> x = 1 >>> print eval('x+1') 2 This function can also be used to execute arbitrary code objects (such as those created by compile()). In this case pass a code object instead of a string. The code object must have been compiled passing 'eval' as the kind argument. Hints: dynamic execution of statements is supported by the exec statement. Execution of statements from a file is supported by the execfile() function. The globals() and locals() functions returns the current global and local dictionary, respectively, which may be useful to pass around for use by eval() or execfile(). best wishes, Oti. On 12/4/06, Neil Benn <nei...@zi...> wrote: > > > > > Hello, > > > > I am trying to evaluate a script which runs as follows (using > both BSF and JYthonInterp does the same thing): > > > > --- > > > > String strScript = "def test():\n"; > > strScript += "\treturn 1\n"; > > strScript += "test()"; > > > > Object objResult = objInterp.eval(strScript); > > > > --- > > > > However I get the following traceback (this is when run from JythonInterp), > I've snipped the bottom bit off because it is in the unit test code > > > > Traceback (innermost last): > > (no code object) at line 0 > > SyntaxError: ('invalid syntax', ('<string>', 1, 1, 'def test():')) > > > > at > org.python.core.parser.fixParseError(parser.java) > > at org.python.core.parser.parse(parser.java) > > at org.python.core.Py.compile_flags(Py.java) > > at org.python.core.Py.compile_flags(Py.java) > > at > org.python.core.__builtin__.eval(__builtin__.java) > > at > org.python.core.__builtin__.eval(__builtin__.java) > > > at > org.python.util.PythonInterpreter.eval(PythonInterpreter.java) > > at > uk.co.ziath.datapaq.server.scripting.JythonScriptProcessor.evaluateScript(JythonScriptProcessor.java:76) > > at > uk.co.ziath.datapaq.server.scripting.test.JythonScriptProcessorTest.testMethodJythonScript(JythonScriptProcessorTest.java:75) > > <snip> > > > > --- > > > > When I attempt to run a simple script such as 3* 4 and evaluate > it, I get back 12 as I would expect. However it seems that any multi-line > script fails on me. Is it true that I cannot use a multi-line script in an > evaluate statement (I know I can do it in an execute statement)? > > > > Thanks for your help. > > > > Cheers, > > > > Neil > > > > > > --- > > Neil Benn > > CEO Ziath Ltd > > http://www.ziath.com > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > > > |
From: Neil B. <nei...@zi...> - 2006-12-04 21:59:49
|
Hello, Thanks for that - I see that it follows CPython, I have that working now although I do have the problem that BSF works differently and you can't get a return from the exec call and I can't execute an eval from Jython. I can wrap the Jython instance so that it uses JythonInterp rather than BSF and give them the same functionality (which is what I'll do). Thanks for your help. Cheers, Neil --- Neil Benn CEO Ziath Ltd http://www.ziath.com -----Original Message----- From: Oti [mailto:oh...@gm...] Sent: 04 December 2006 22:48 To: nei...@zi... Cc: jyt...@li... Subject: Re: [Jython-users] Use of eval Neil, use Object objResult = objInterp.exec(strScript); Please read about exec() here: http://www.python.org/doc/2.3.5/ref/exec.html And eval(), from the CPython documentation (http://www.python.org/doc/2.3/lib/built-in-funcs.html): eval( expression[, globals[, locals]]) The arguments are a string and two optional dictionaries. The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local name space. If the globals dictionary is present and lacks '__builtins__', the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard __builtin__ module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example: >>> x = 1 >>> print eval('x+1') 2 This function can also be used to execute arbitrary code objects (such as those created by compile()). In this case pass a code object instead of a string. The code object must have been compiled passing 'eval' as the kind argument. Hints: dynamic execution of statements is supported by the exec statement. Execution of statements from a file is supported by the execfile() function. The globals() and locals() functions returns the current global and local dictionary, respectively, which may be useful to pass around for use by eval() or execfile(). best wishes, Oti. On 12/4/06, Neil Benn <nei...@zi...> wrote: > > > > > Hello, > > > > I am trying to evaluate a script which runs as follows (using > both BSF and JYthonInterp does the same thing): > > > > --- > > > > String strScript = "def test():\n"; > > strScript += "\treturn 1\n"; > > strScript += "test()"; > > > > Object objResult = objInterp.eval(strScript); > > > > --- > > > > However I get the following traceback (this is when run from JythonInterp), > I've snipped the bottom bit off because it is in the unit test code > > > > Traceback (innermost last): > > (no code object) at line 0 > > SyntaxError: ('invalid syntax', ('<string>', 1, 1, 'def test():')) > > > > at > org.python.core.parser.fixParseError(parser.java) > > at org.python.core.parser.parse(parser.java) > > at org.python.core.Py.compile_flags(Py.java) > > at org.python.core.Py.compile_flags(Py.java) > > at > org.python.core.__builtin__.eval(__builtin__.java) > > at > org.python.core.__builtin__.eval(__builtin__.java) > > > at > org.python.util.PythonInterpreter.eval(PythonInterpreter.java) > > at > uk.co.ziath.datapaq.server.scripting.JythonScriptProcessor.evaluateScrip t(JythonScriptProcessor.java:76) > > at > uk.co.ziath.datapaq.server.scripting.test.JythonScriptProcessorTest.test MethodJythonScript(JythonScriptProcessorTest.java:75) > > <snip> > > > > --- > > > > When I attempt to run a simple script such as 3* 4 and evaluate > it, I get back 12 as I would expect. However it seems that any multi-line > script fails on me. Is it true that I cannot use a multi-line script in an > evaluate statement (I know I can do it in an execute statement)? > > > > Thanks for your help. > > > > Cheers, > > > > Neil > > > > > > --- > > Neil Benn > > CEO Ziath Ltd > > http://www.ziath.com > > > ------------------------------------------------------------------------ - > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDE V > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > > > |
From: Sidharth K. <sid...@gm...> - 2006-12-04 21:54:02
|
Hi Ben, eval is meant for expressions. What you want to use is exec Object objResult =3D objInterp.exec(strScript); On 05-Dec-06, at 2:48 AM, Neil Benn wrote: > Hello, > > > > I am trying to evaluate a script which runs as follows =20 > (using both BSF and JYthonInterp does the same thing): > > > > --- > > > > String strScript =3D "def test():\n"; > > strScript +=3D "\treturn 1\n"; > > strScript +=3D "test()"; > > > > Object objResult =3D objInterp.eval(strScript); > > > > --- > > > > However I get the following traceback (this is when run from =20 > JythonInterp), I=92ve snipped the bottom bit off because it is in the =20= > unit test code > > > > Traceback (innermost last): > > (no code object) at line 0 > > SyntaxError: ('invalid syntax', ('<string>', 1, 1, 'def test():')) > > > > at org.python.core.parser.fixParseError(parser.java) > > at org.python.core.parser.parse(parser.java) > > at org.python.core.Py.compile_flags(Py.java) > > at org.python.core.Py.compile_flags(Py.java) > > at org.python.core.__builtin__.eval(__builtin__.java) > > at org.python.core.__builtin__.eval(__builtin__.java) > > at org.python.util.PythonInterpreter.eval=20 > (PythonInterpreter.java) > > at =20 > uk.co.ziath.datapaq.server.scripting.JythonScriptProcessor.evaluateScr=20= > ipt(JythonScriptProcessor.java:76) > > at =20 > uk.co.ziath.datapaq.server.scripting.test.JythonScriptProcessorTest.te=20= > stMethodJythonScript(JythonScriptProcessorTest.java:75) > > <snip> > > > > --- > > > > When I attempt to run a simple script such as 3* 4 and =20 > evaluate it, I get back 12 as I would expect. However it seems =20 > that any multi-line script fails on me. Is it true that I cannot =20 > use a multi-line script in an evaluate statement (I know I can do =20 > it in an execute statement)? > > > > Thanks for your help. > > > > Cheers, > > > > Neil > > > > > > --- > > Neil Benn > > CEO Ziath Ltd > > http://www.ziath.com > > > > ----------------------------------------------------------------------=20= > --- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to =20 > share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?=20 > page=3Djoin.php&p=3Dsourceforge&CID=3DDEVDEV____________________________= ____=20 > _______________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Neil B. <nei...@zi...> - 2006-12-07 18:41:50
|
Hello, Whoops, no I didn't have it working - ran the wrong test (bit tired that day). The issue is that I can't use objInterp.exec(strScript) as exec doesn't return an object - it just returns void. The current way I have to do register a return value, tell the user to set the result to that value, get it out and then deregister that value inside my script. That works but it is very different for the user as they have to do thing differently when coding Jython extensions to the system than a ruby extension (haven't tried groovy yet). From what I can see - I'm stuck here, can anyone point me to a potential solution (I'm fairly experienced in CPython as I use it in my day job and code Java in the evening - contrary to most people ;) )? Thanks, in advance for your help. Cheers, Neil --- Neil Benn CEO Ziath Ltd http://www.ziath.com -----Original Message----- From: jyt...@li... [mailto:jyt...@li...] On Behalf Of Sidharth Kuruvila Sent: 04 December 2006 22:53 To: jyt...@li... Subject: Re: [Jython-users] Use of eval Hi Ben, eval is meant for expressions. What you want to use is exec Object objResult = objInterp.exec(strScript); On 05-Dec-06, at 2:48 AM, Neil Benn wrote: Hello, I am trying to evaluate a script which runs as follows (using both BSF and JYthonInterp does the same thing): --- String strScript = "def test():\n"; strScript += "\treturn 1\n"; strScript += "test()"; Object objResult = objInterp.eval(strScript); --- However I get the following traceback (this is when run from JythonInterp), I've snipped the bottom bit off because it is in the unit test code Traceback (innermost last): (no code object) at line 0 SyntaxError: ('invalid syntax', ('<string>', 1, 1, 'def test():')) at org.python.core.parser.fixParseError(parser.java) at org.python.core.parser.parse(parser.java) at org.python.core.Py.compile_flags(Py.java) at org.python.core.Py.compile_flags(Py.java) at org.python.core.__builtin__.eval(__builtin__.java) at org.python.core.__builtin__.eval(__builtin__.java) at org.python.util.PythonInterpreter.eval(PythonInterpreter.java) at uk.co.ziath.datapaq.server.scripting.JythonScriptProcessor.evaluateScrip t(JythonScriptProcessor.java:76) at uk.co.ziath.datapaq.server.scripting.test.JythonScriptProcessorTest.test MethodJythonScript(JythonScriptProcessorTest.java:75) <snip> --- When I attempt to run a simple script such as 3* 4 and evaluate it, I get back 12 as I would expect. However it seems that any multi-line script fails on me. Is it true that I cannot use a multi-line script in an evaluate statement (I know I can do it in an execute statement)? Thanks for your help. Cheers, Neil --- Neil Benn CEO Ziath Ltd http://www.ziath.com ------------------------------------------------------------------------ - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php <http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVD EV_______________________________________________> &p=sourceforge&CID=DEVDEV_______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Michael C. <chi...@mi...> - 2006-12-07 19:14:53
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> Something I've done to address this sort of thing is to call the function from a different one which you write yourself, which does the registerBean() so that the user doesn't have to. E.g. in Java have a template like:<br> <pre>import theFunctions # pretend all functions are defined in the same file result = theFunctions.%s() bsf.registerBean("result", result) </pre> then in Java if you have a method that takes a function name you would like to run, you just have to do something like [untested code]:<br> <pre>Object execJythonFunction(String funcName) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.printf(theTemplate, funcName); String actualCode = sw.toString(); bsfMgr.exec(..., actualCode); Object result = bsfMgr.lookupBean("result"); return result; } </pre> And now, the user's function doesn't need to do any registerBean stuff. All it needs to do is compute some value in the function and return it, and the template code does the rest. Does that make sense?<br> <br> Andy<br> <br> Neil Benn wrote: <blockquote cite="mid001701c71a2f$341d9ed0$0300a8c0@JOSHUA" type="cite"> <meta http-equiv="Content-Type" content="text/html; "> <meta name="ProgId" content="Word.Document"> <meta name="Generator" content="Microsoft Word 10"> <meta name="Originator" content="Microsoft Word 10"> <link rel="File-List" href="cid:filelist.xml@01C71A37.950F2670"> <!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:DoNotRelyOnCSS/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:DocumentKind>DocumentEmail</w:DocumentKind> <w:EnvelopeVis/> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--> <style> <!-- /* Font Definitions */ @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421319 -2147483648 8 0 66047 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:blue; text-decoration:underline; text-underline:single;} p.MsoAutoSig, li.MsoAutoSig, div.MsoAutoSig {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} span.apple-style-span {mso-style-name:apple-style-span;} span.spelle {mso-style-name:spelle;} span.grame {mso-style-name:grame;} span.EmailStyle21 {mso-style-type:personal-reply; mso-style-noshow:yes; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; font-family:Arial; mso-ascii-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; color:navy;} span.SpellE {mso-style-name:""; mso-spl-e:yes;} span.GramE {mso-style-name:""; mso-gram-e:yes;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]--> <div class="Section1"> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Hello,<o:p></o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><span style=""> </span>Whoops, no I didn’t have it working – ran the wrong test (bit tired that day).<span style=""> </span>The issue is that I can’t use <span class="SpellE"><span class="GramE">objInterp.exec</span></span><span class="GramE">(</span><span class="SpellE">strScript</span>) as exec doesn’t return an object – it just returns void.<span style=""> </span>The current way I have to do register a return value, tell the user to set the result to that value, get it out and then deregister that value inside my script.<span style=""> </span>That works but it is very different for the user as they have to do thing differently when coding <span class="SpellE">Jython</span> extensions to the system than a ruby extension (haven’t tried groovy yet).<o:p></o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><span style=""> </span>From what I can see – I’m stuck here, can anyone point me to a potential solution (I’m fairly experienced in <span class="SpellE">CPython</span> as I use it in my day job and code Java in the evening – contrary to most people ;) )?<o:p></o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><span style=""> </span>Thanks, in advance for your help.<o:p></o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Cheers,<o:p></o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Neil<o:p></o:p></span></font></p> <div> <p class="MsoAutoSig"><font color="navy" face="Times New Roman" size="3"><span style="font-size: 12pt; color: navy;" lang="EN-GB">---<o:p></o:p></span></font></p> <p class="MsoAutoSig"><font color="navy" face="Times New Roman" size="3"><span style="font-size: 12pt; color: navy;" lang="EN-GB">Neil Benn<o:p></o:p></span></font></p> <p class="MsoAutoSig"><font color="navy" face="Times New Roman" size="3"><span style="font-size: 12pt; color: navy;" lang="EN-GB">CEO Ziath Ltd<o:p></o:p></span></font></p> <p class="MsoAutoSig"><font color="navy" face="Times New Roman" size="3"><span style="font-size: 12pt; color: navy;" lang="EN-GB"><a class="moz-txt-link-freetext" href="http://www.ziath.com">http://www.ziath.com</a><o:p></o:p></span></font></p> </div> <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Tahoma" size="2"><span style="font-size: 10pt; font-family: Tahoma;">-----Original Message-----<br> <b><span style="font-weight: bold;">From:</span></b> <a class="moz-txt-link-abbreviated" href="mailto:jyt...@li...">jyt...@li...</a> [<a class="moz-txt-link-freetext" href="mailto:jyt...@li...">mailto:jyt...@li...</a>] <b><span style="font-weight: bold;">On Behalf Of </span></b>Sidharth Kuruvila<br> <b><span style="font-weight: bold;">Sent:</span></b> 04 December 2006 22:53<br> <b><span style="font-weight: bold;">To:</span></b> <a class="moz-txt-link-abbreviated" href="mailto:jyt...@li...">jyt...@li...</a><br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [Jython-users] Use of eval</span></font></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><o:p> </o:p></span></font></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">Hi Ben,<o:p></o:p></span></font></p> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><o:p> </o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">eval is meant for expressions. What you want to use is exec<o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><o:p> </o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><span class="apple-style-span"><font face="Arial" size="1"><span style="font-size: 8pt; font-family: Arial;" lang="EN-GB">Object objResult = objInterp.exec(strScript);</span></font></span><o:p></o:p></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><o:p> </o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><o:p> </o:p></span></font></p> <div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">On 05-Dec-06, at 2:48 AM, Neil Benn wrote:<o:p></o:p></span></font></p> </div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><br style=""> <!--[if !supportLineBreakNewLine]--><br style=""> <!--[endif]--><o:p></o:p></span></font></p> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:SMARTTAGTYPE namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName">Hello,<O:P></O:P></O:SMARTTAGTYPE></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span>I am trying to evaluate a script which runs as follows (using both BSF and <span class="spelle">JYthonInterp</span> does the same thing):<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">---<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;">String <span class="spelle">strScript</span> = </span></span></font><font color="#2a00ff" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(42, 0, 255);">"def <span class="grame">test(</span>):\n"</span></span></font><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;">;</span></span></font><o:p></o:p></p> <span courier=""><O:P></O:P></span> <p class="MsoNormal" style="margin-left: 36pt;"><span class="grame"><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;">strScript</span></span></font></span><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> += </span></span></font><font color="#2a00ff" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(42, 0, 255);">"\<span class="spelle">treturn</span> 1\n"</span></span></font><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;">;</span></span></font><o:p></o:p></p> <span courier=""><O:P></O:P></span> <p class="MsoNormal" style="margin-left: 36pt;"><span class="grame"><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;">strScript</span></span></font></span><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> += </span></span></font><font color="#2a00ff" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(42, 0, 255);">"test()"</span></span></font><font color="black" face="Courier New" size="2"><span courier=""><span style="font-size: 10pt; font-family: "Courier New"; color: black;">;<O:P></O:P></span></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font color="black" face="Courier New" size="2"><span courier=""><O:P><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> </span></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">Object <span class="spelle">objResult</span> = <span class="grame">objInterp.eval(</span><span class="spelle">strScript</span>);<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">---<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">However I get the following <span class="spelle">traceback</span> (this is when run from <span class="spelle">JythonInterp</span>), I’ve snipped the bottom bit off because it is in the unit test code<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="spelle">Traceback</span> (innermost last):<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span>(<span class="grame">no</span> code object) at line 0<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><span class="spelle"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">SyntaxError</span></font></span><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">: ('invalid syntax', ('<string>', 1, 1, 'def <span class="grame">test(</span>):'))<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> <span class="spelle">org.python.core.parser.fixParseError</span>(<span class="spelle">parser.java</span>)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> <span class="spelle">org.python.core.parser.parse</span>(<span class="spelle">parser.java</span>)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> <span class="spelle">org.python.core.Py.compile_flags</span>(<span class="spelle">Py.java</span>)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> <span class="spelle">org.python.core.Py.compile_flags</span>(<span class="spelle">Py.java</span>)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> <span class="spelle">org.python.core.__builtin__.eval</span>(__<span class="spelle">builtin__.java</span>)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> <span class="spelle">org.python.core.__builtin__.eval</span>(__<span class="spelle">builtin__.java</span>)<span style=""> </span><O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> <span class="spelle">org.python.util.PythonInterpreter.eval</span>(<span class="spelle">PythonInterpreter.java</span>)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> uk.co.ziath.datapaq.server.scripting.JythonScriptProcessor.evaluateScript(JythonScriptProcessor.java:76)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span><span class="grame">at</span> uk.co.ziath.datapaq.server.scripting.test.JythonScriptProcessorTest.testMethodJythonScript(JythonScriptProcessorTest.java:75)<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><<span class="grame">snip</span>><O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">---<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span>When I attempt to run a simple script such as 3* 4 and evaluate it, I get back 12 as I would expect.<span style=""> </span>However it seems that any multi-line script fails on me.<span style=""> </span>Is it true that I cannot use a multi-line script in an evaluate statement (I know I can do it in an execute statement)?<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><span style=""> </span>Thanks for your help.<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">Cheers,<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB">Neil<O:P></O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;" lang="EN-GB"><O:P> </O:P></span></font><o:p></o:p></p> <p class="MsoAutoSig" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;" lang="EN-GB">---<O:P></O:P></span><o:p></o:p></font></p> <p class="MsoAutoSig" style="margin-left: 36pt;"><ST1:PERSONNAME><font face="Times New Roman" size="3"><span style="font-size: 12pt;" lang="EN-GB">Neil Benn</span><o:p></o:p></font></ST1:PERSONNAME></p> <O:P></O:P> <p class="MsoAutoSig" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;" lang="EN-GB">CEO Ziath Ltd<O:P></O:P></span><o:p></o:p></font></p> <p class="MsoAutoSig" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;" lang="EN-GB"><a href="http://www.ziath.com">http://www.ziath.com</a><O:P></O:P></span><o:p></o:p></font></p> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;" lang="EN-GB"><O:P> </O:P></span><o:p></o:p></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">-------------------------------------------------------------------------<o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">Take Surveys. Earn Cash. Influence the Future of IT<o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">Join SourceForge.net's Techsay panel and you'll get the chance to share your<o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">opinions on IT & business topics through brief surveys - and earn cash<o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><a href="http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV_______________________________________________">http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV_______________________________________________</a><o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">Jython-users mailing list<o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><a href="mailto:Jyt...@li...">Jyt...@li...</a><o:p></o:p></span></font></p> </div> <div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><a href="https://lists.sourceforge.net/lists/listinfo/jython-users">https://lists.sourceforge.net/lists/listinfo/jython-users</a><o:p></o:p></span></font></p> </div> </div> <p class="MsoNormal" style="margin-left: 36pt;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><o:p> </o:p></span></font></p> </div> </div> <pre wrap=""> <hr size="4" width="90%"> ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash <a class="moz-txt-link-freetext" href="http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV">http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV</a></pre> <pre wrap=""> <hr size="4" width="90%"> _______________________________________________ Jython-users mailing list <a class="moz-txt-link-abbreviated" href="mailto:Jyt...@li...">Jyt...@li...</a> <a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/jython-users">https://lists.sourceforge.net/lists/listinfo/jython-users</a> </pre> </blockquote> <br> </body> </html> |
From: Sidharth K. <sid...@gm...> - 2006-12-09 06:42:53
|
Building on Michael's idea:(Warning untested code) String code = "\ def test():\n\ return 1\n\ return test()"; \\I've added a return . . . String wrapperFuncCode = "def wrapperFunc():\n"+ code.replaceAll("\\n", "\n "); obInterp.exec(magicFuncCode); try{ return objInterp.eval("wrapperFunc()"); }finally{ objInterp.exec("del wrapperFunc");//Probably unnecessary } On 12/8/06, Michael Chisholm <chi...@mi...> wrote: > > Something I've done to address this sort of thing is to call the function > from a different one which you write yourself, which does the registerBean() > so that the user doesn't have to. E.g. in Java have a template like: > > import theFunctions # pretend all functions are defined in the same file > > result = theFunctions.%s() > bsf.registerBean("result", result) > > then in Java if you have a method that takes a function name you would > like to run, you just have to do something like [untested code]: > > Object execJythonFunction(String funcName) > { > StringWriter sw = new StringWriter(); > PrintWriter pw = new PrintWriter(sw); > pw.printf(theTemplate, funcName); > String actualCode = sw.toString(); > bsfMgr.exec(..., actualCode); > Object result = bsfMgr.lookupBean("result"); > return result; > } > > And now, the user's function doesn't need to do any registerBean stuff. > All it needs to do is compute some value in the function and return it, and > the template code does the rest. Does that make sense? > > Andy > Neil Benn wrote: > |