From: <mco...@sp...> - 2001-10-11 16:38:55
|
Hi Folks, We love Jython. We're trying to provide some functionality to our users that allows them to start a Jython interpreter, user our system (by instatiating a class), then quit. However, we need to have a cleanup method run when the interpreter exits. Is there a way to do this? THanks. matt |
From: Matthew C. <co...@cs...> - 2001-10-12 18:39:54
|
(re-sending this because return email address didn't get included) Hi Folks, We love Jython. We're trying to provide some functionality to our users that allows them to start a Jython interpreter, user our system (by instatiating a class), then quit. However, we need to have a cleanup method run when the interpreter exits. Is there a way to do this? THanks. matt |
From: Samuele P. <pe...@in...> - 2001-10-12 20:03:57
|
> Hi Folks, > > We love Jython. We're trying to provide some functionality to our users > that allows them to start a Jython interpreter, user our system (by > instatiating > a class), then quit. However, we need to have a cleanup method run when > the interpreter exits. Is there a way to do this? THanks. > I don't completely get your usage scenario so I'm guessing. You can catch a SystemExit Jython (*) exception plus put cleanup code on the normal exiting path. Or are you asking how to cleanup an interpreter? regards, Samuele Pedroni. (*) try { ... } catch (org.python.core.PyException exc) { if (org.python.core.Py.matchException(exc, org.python.core.Py.SystemExit)) { ... } } |
From: Ype K. <yk...@xs...> - 2001-10-13 15:06:25
|
Matt, >Hi Folks, > >We love Jython. We're trying to provide some functionality to our users that allows them to start a Jython interpreter, user our system (by instatiating a class), then quit. However, we need to have a cleanup method run when the interpreter exits. Is there a way to do this? THanks. In jython: use the atexit module, or use try/finally around the exec or execfile() around the user code invocation. In java: use try/finally around the call to the jython interpreter. Have fun, Ype |
From: Samuele P. <pe...@in...> - 2001-10-13 19:16:13
|
> Matt, > > >Hi Folks, > > > >We love Jython. We're trying to provide some functionality to our users that allows them to start a Jython interpreter, user our system (by instatiating a class), then quit. However, we need to have a cleanup method run when the interpreter exits. Is there a way to do this? THanks. > > In jython: use the atexit module, or use try/finally around the > exec or execfile() around the user code invocation. > In java: use try/finally around the call to the jython interpreter. Maybe I'm just very confused, but despite of the News jython does not support effectively atexit . regards. |
From: <bc...@wo...> - 2001-10-31 21:42:33
|
[Samuele] >Maybe I'm just very confused, but despite of the News >jython does not support effectively atexit . That's true. The "atexit" module was added because it is imported by the "threading" module and the "threading" module contained so much usefull stuff that the missing daemon thread cleanup was a minor issue. At the moment, "atexit" is completely useless. [I guess there is a lesson about which CPython modules we include with Jython hidden here. Unfortunately I don't have a clue of what the lesson was.] regards, finn |
From: Ype K. <yk...@xs...> - 2001-10-15 18:28:53
|
Hello jythoneers, I've been using pyunit for a while in jython and would like to have code coverage reports from some of the tests. I started from Skip Montanaro's code coverage module (http://musi-cal.mojam.com/~skip/python/trace.py) and found out that the biggest hurdle probably is obtaining line numbers that have code assigned to them. He uses the CPython parser to get actual lines from the SETLINENO instructions in CPython byte code. That won't work for jython, so I started piecing together a java class file disassembler in jython to find out how it's done in jython class files. I got to the point of disassembling individual instructions more or less correctly, and then I found out that setline() is called only at the beginning of each function, which is a showstopper in this case. There is also a line number table, but I wouldn't know how to interpret this while the JVM is executing. Some questions: - Is there an option for jythonc to have setline() called for each line of jython code? I checked the sources a bit and even found the point at which the setline call is emitted for a jython function, but I got no further than that. - Is line tracing implemented in jython? Function tracing works fine in the profiler, but line tracing is a bit more involved, and I did not check whether this can actually be done in jython. - Does anyone know about a real java class file disassembler written in python/jython? Or one written in java that allows for visiting the individual instructions from a jython module so the setline arguments can be filtered out easily? Regards, Ype |
From: <bc...@wo...> - 2001-10-31 21:23:15
|
[Ype Kingma] >Hello jythoneers, > >I've been using pyunit for a while in jython and would like to >have code coverage reports from some of the tests. >I started from Skip Montanaro's code coverage module >(http://musi-cal.mojam.com/~skip/python/trace.py) and found out >that the biggest hurdle probably is obtaining line numbers that have code >assigned to them. He uses the CPython parser to get actual lines >from the SETLINENO instructions in CPython byte code. >That won't work for jython, so I started piecing together a java class >file disassembler in jython to find out how it's done in jython class files. >I got to the point of disassembling individual >instructions more or less correctly, and then I found out >that setline() is called only at the beginning of each function, >which is a showstopper in this case. For dynamicly compiled python code, a call to PyFrame.setline(int) is generated for each statement (including expr_stmt). Maybe the call to setline is missing for some statement types, but it can't be that many. >There is also a line number table, but I wouldn't know how >to interpret this while the JVM is executing. The line number table maps java bytecode PC addresses to source line numbers, but as you say, it is useless while running since we don't have access to the java bytecode PC. But if all you need to know is whether a line have some executable python code, then the line number table in the $py.class file can answer that with the same certainty as the setline() method calls can. Each time a call to PyFrame.setline() is generated, we also add a line number entry to the line number table. See the Code.setline() for details. > http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jython/jython/org/python/compiler/Code.java?annotate=2.4#517 >Some questions: >- Is there an option for jythonc to have setline() called for each line > of jython code? I checked the sources a bit and even found the > point at which the setline call is emitted for a jython function, > but I got no further than that. For jythonc? No. >- Is line tracing implemented in jython? Function tracing works fine > in the profiler, but line tracing is a bit more involved, and I did > not check whether this can actually be done in jython. Line tracing is implemented in dynamic compilation. Unless you have discovered a bug of course. This works for me: def tracer(frame, why, arg): print why, frame.f_lineno, arg return tracer def foo(): for i in range(10): a = "abc" a = "Done" import sys sys.settrace(tracer) foo() regards, finn |
From: Ype K. <yk...@xs...> - 2001-10-31 23:13:03
|
Finn, >[Ype Kingma] > >>Hello jythoneers, >> >>I've been using pyunit for a while in jython and would like to > >have code coverage reports from some of the tests. <...> >But if all you need to know is whether a line have some executable >python code, then the line number table in the $py.class file can answer >that with the same certainty as the setline() method calls can. It would probably be a lot easier to parse, so I'll give it a try. >Each time a call to PyFrame.setline() is generated, we also add a line >number entry to the line number table. See the Code.setline() for >details. Ok. > >Line tracing is implemented in dynamic compilation. Unless you have >discovered a bug of course. This works for me: > > >def tracer(frame, why, arg): > print why, frame.f_lineno, arg > return tracer > >def foo(): > for i in range(10): > a = "abc" > a = "Done" > >import sys >sys.settrace(tracer) >foo() I'll give it a try, Thanks, Ype |