From: william r. <wil...@gm...> - 2009-08-06 06:33:02
|
Recently, the development team has given us a jython (using jyconsole, perhaps we should switch to jythonconsole?) environment within the client to develop our own commands. Sadly, we have no jython experts in house. Here is my question: I can currently do commands like >>MoveMotor(motor position) within the console. However, for our users, I would think something like: >>mv motor4=3 or even: >>mv motor4 3 would be more intuitive. So, here is my question: is there any easy way to alias commands in the python interpreter? Or, do I need to catch the string before it goes to the interpreter and parse the string, strip the arguments and call my function with them first? Within cpython (or jython if anyone knows), where can I get a hook into the string before an exec() is run? Also, are modules such as optparse, argparse, cmd2, cmdline, etc. limited to only sys.argv, or can they be used on any string (or I guess list)? Thanks, William |
From: Cliff H. <xl...@da...> - 2009-08-06 13:53:11
|
Don't confuse Jython or CPython with a shell script like Bash or anything like that. In order to do what you are asking, you might need to make an object wrapper for it, and then you can set up (I believe) a way of overriding the equals/assignment operator. Now, with Jython, it can use JavaBean properties like they are class variables, what I mean is something like: motor4.getPosition() or motor4.setPosition() can be rewritten as motor4.position. So you can, instead of motor4.setPosition(3), just write motor4.position = 3 and get the same thing. On Wed, Aug 5, 2009 at 11:32 PM, william ratcliff < wil...@gm...> wrote: > Recently, the development team has given us a jython (using jyconsole, > perhaps we should switch to jythonconsole?) environment within the client to > develop our own commands. Sadly, we have no jython experts in house. Here > is my question: > > I can currently do commands like > >>MoveMotor(motor position) > > within the console. However, for our users, I would think something like: > >>mv motor4=3 > or even: > >>mv motor4 3 > > would be more intuitive. > > So, here is my question: > is there any easy way to alias commands in the python interpreter? Or, do > I need to > catch the string before it goes to the interpreter and parse the string, > strip the arguments and call my function with them first? Within cpython > (or jython if anyone knows), where can I get a hook into the string before > an exec() is run? Also, are modules such as optparse, argparse, cmd2, > cmdline, etc. limited to only sys.argv, or can they be used on any string > (or I guess list)? > > Thanks, > William > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > > -- "I'm not responcabel fer my computer's spleling errnors" - Xlorep DarkHelm Website: http://darkhelm.org Sent from Santa Maria, CA, United States |
From: william r. <wil...@gm...> - 2009-08-06 14:58:07
|
Yes, I could use properties which would then trigger get and set methods so that I could do something like motor4.position=3 If I was clever, I could even make a motor class and have individual motors inherit from it. But, this presents a few problems, first I really don't want to define our 148+ motors (which all have creative names) this way. So, I think want I'm looking for is does anyone know if cmd from the python standard library works and exists in jython? Then, I can define some simple commands for users where they can simply type mv SampleSlit 30 This allows for aliasing, etc. However, when using cmd, I think it runs in it's own loop (is that correct?). If so, then how do I do normal python commands (for loops, etc.)? Do I need to start playing with the InteractiveInterpreter? Thanks, William On Thu, Aug 6, 2009 at 9:52 AM, Cliff Hill <xl...@da...> wrote: > Don't confuse Jython or CPython with a shell script like Bash or anything > like that. In order to do what you are asking, you might need to make an > object wrapper for it, and then you can set up (I believe) a way of > overriding the equals/assignment operator. > > Now, with Jython, it can use JavaBean properties like they are class > variables, what I mean is something like: > > motor4.getPosition() or motor4.setPosition() can be rewritten as > motor4.position. > > So you can, instead of motor4.setPosition(3), just write motor4.position = > 3 and get the same thing. > > On Wed, Aug 5, 2009 at 11:32 PM, william ratcliff < > wil...@gm...> wrote: > >> Recently, the development team has given us a jython (using jyconsole, >> perhaps we should switch to jythonconsole?) environment within the client to >> develop our own commands. Sadly, we have no jython experts in house. Here >> is my question: >> >> I can currently do commands like >> >>MoveMotor(motor position) >> >> within the console. However, for our users, I would think something like: >> >>mv motor4=3 >> or even: >> >>mv motor4 3 >> >> would be more intuitive. >> >> So, here is my question: >> is there any easy way to alias commands in the python interpreter? Or, do >> I need to >> catch the string before it goes to the interpreter and parse the string, >> strip the arguments and call my function with them first? Within cpython >> (or jython if anyone knows), where can I get a hook into the string before >> an exec() is run? Also, are modules such as optparse, argparse, cmd2, >> cmdline, etc. limited to only sys.argv, or can they be used on any string >> (or I guess list)? >> >> Thanks, >> William >> >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day >> trial. Simplify your report design, integration and deployment - and focus >> on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users >> >> > > > -- > "I'm not responcabel fer my computer's spleling errnors" - Xlorep DarkHelm > Website: http://darkhelm.org > Sent from Santa Maria, CA, United States > |
From: Marc D. <ma...@op...> - 2009-08-06 15:34:49
|
On Thu, Aug 6, 2009 at 9:57 AM, william ratcliff <wil...@gm... > wrote: > Yes, I could use properties which would then trigger get and set methods so > that I > could do something like motor4.position=3 > > If I was clever, I could even make a motor class and have individual motors > inherit from it. But, this presents a few problems, first I really don't > want to define our 148+ motors (which all have creative names) this way. > But this is Python — you'd define __getattr__ and __setattr__ methods to let you write: mv.SampleSlit=30 or mv.motor4=10 That has the same number of characters as mv SampleSlit 30. Marc. |
From: Leo S. M. <leo...@gm...> - 2009-08-06 17:21:22
|
On Thu, Aug 6, 2009 at 11:09 AM, Marc Downie<ma...@op...> wrote: [...] > But this is Python — you'd define __getattr__ and __setattr__ methods to let > you write: > mv.SampleSlit=30 > or > mv.motor4=10 > That has the same number of characters as mv SampleSlit 30. Another alternative, using **kwargs: mv(motor4=10) But I'm not getting what's the idea here. If having the "spaced-arguments syntax" is a hard requirement, I'd like to know what are the other pieces of the problem (e.g.: why are you trying to solve this using Python/Jython?) to be able to give better answers. -- Leo Soto M. http://blog.leosoto.com |
From: Raghuram D. <dra...@gm...> - 2009-08-06 18:19:53
|
On Thu, Aug 6, 2009 at 1:21 PM, Leo Soto M.<leo...@gm...> wrote: > But I'm not getting what's the idea here. If having the > "spaced-arguments syntax" is a hard requirement, I'd like to know what > are the other pieces of the problem (e.g.: why are you trying to solve > this using Python/Jython?) to be able to give better answers. This requirement will come if you want to write a command line interpreter using python but still have access to python code. stdlib module "cmd.py" can be used to write nice command line interpreters but then only those commands which are defined and implemented would be accessible to the user. For example, you can't simply write a for loop at the prompt. I have suggested to OP that ipython comes close to what he is looking for, even though I am not sure if ipython works with jython (http://bugs.jython.org/issue1133). Thanks, Raghu |
From: william r. <wil...@gm...> - 2009-08-06 18:34:54
|
I want to start by thanking everyone for their quick responses. Keyword args are an excellent suggestion! Assuming that funcutils is in jython 2.5, then we can get around having to explicitly define every motor. Now, for the problem that I am trying to solve: We are a rather large facility where users come to perform experiments. We had an ancient piece of software (started on the VAX) used to drive the instrument, but it cannot handle our new instruments. Some years back, the control software was rewritten using a client server model. The server is in python and lives on a linux box. The client is in java. Part of this was a cross platform issue (we have people who may need to drive the instruments using macs, linux, or windows). Part of it was a question of expertise and ability to find programmers. Now, there is a command set implemented in Java that is then communicated to the server. Now, we would like to allow the users (scientists) to be able to have a scripting environment to perform experiments. Since there is already a client written in Java, jython would be a natural choice for a scripting language. However, as functionality is added by "power/expert" users in the form of jython modules, we would like to be able to port that functionality back to "regular" users. The command syntax of both the current and previous software have been of the form: "move motor4 10" so, while in jython for our "power users", they would be able to do something like move(motor4=10), I would like to avoid requiring regular users to learn python, but rather to just give them back commands with similar syntax to what they are used to. So, it sounds like I should either investigate whether ipython and jython play well together or look into the cmd module. Thanks, William On Thu, Aug 6, 2009 at 1:21 PM, Leo Soto M. <leo...@gm...> wrote: > On Thu, Aug 6, 2009 at 11:09 AM, Marc Downie<ma...@op...> > wrote: > [...] > > But this is Python — you'd define __getattr__ and __setattr__ methods to > let > > you write: > > mv.SampleSlit=30 > > or > > mv.motor4=10 > > That has the same number of characters as mv SampleSlit 30. > > Another alternative, using **kwargs: > > mv(motor4=10) > > But I'm not getting what's the idea here. If having the > "spaced-arguments syntax" is a hard requirement, I'd like to know what > are the other pieces of the problem (e.g.: why are you trying to solve > this using Python/Jython?) to be able to give better answers. > > -- > Leo Soto M. > http://blog.leosoto.com > |
From: Cliff H. <xl...@da...> - 2009-08-06 19:51:02
|
It sounds like you almost want TCL syntax in Python, but I'm curious about what the end results of your attempts would be :) On Thu, Aug 6, 2009 at 11:34 AM, william ratcliff < wil...@gm...> wrote: > I want to start by thanking everyone for their quick responses. > > Keyword args are an excellent suggestion! Assuming that funcutils is in > jython 2.5, then we can get around having to explicitly define every motor. > > Now, for the problem that I am trying to solve: > > We are a rather large facility where users come to perform experiments. We > had an ancient piece of software (started on the VAX) used to drive the > instrument, but it cannot handle our new instruments. Some years back, the > control software was rewritten using a client server model. The server is > in python and lives on a linux box. The client is in java. Part of this > was a cross platform issue (we have people who may need to drive the > instruments using macs, linux, or windows). Part of it was a question of > expertise and ability to find programmers. Now, there is a command set > implemented in Java that is then communicated to the server. > > Now, we would like to allow the users (scientists) to be able to have a > scripting environment to perform experiments. Since there is already a > client written in Java, jython would be a natural choice for a scripting > language. However, as functionality is added by "power/expert" users in the > form of jython modules, we would like to be able to port that functionality > back to "regular" users. > > The command syntax of both the current and previous software have been of > the form: > "move motor4 10" > > so, while in jython for our "power users", they would be able to do > something like > move(motor4=10), I would like to avoid requiring regular users to learn > python, but rather to just give them back commands with similar syntax to > what they are used to. So, it sounds like I should either investigate > whether ipython and jython play well together or look into the cmd module. > > Thanks, > William > > > On Thu, Aug 6, 2009 at 1:21 PM, Leo Soto M. <leo...@gm...> wrote: > >> On Thu, Aug 6, 2009 at 11:09 AM, Marc Downie<ma...@op...> >> wrote: >> [...] >> > But this is Python — you'd define __getattr__ and __setattr__ methods to >> let >> > you write: >> > mv.SampleSlit=30 >> > or >> > mv.motor4=10 >> > That has the same number of characters as mv SampleSlit 30. >> >> Another alternative, using **kwargs: >> >> mv(motor4=10) >> >> But I'm not getting what's the idea here. If having the >> "spaced-arguments syntax" is a hard requirement, I'd like to know what >> are the other pieces of the problem (e.g.: why are you trying to solve >> this using Python/Jython?) to be able to give better answers. >> >> -- >> Leo Soto M. >> http://blog.leosoto.com >> > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > > -- "I'm not responcabel fer my computer's spleling errnors" - Xlorep DarkHelm Website: http://darkhelm.org |
From: Jim B. <jb...@zy...> - 2009-08-06 20:14:18
|
ipython addresses William's interests for a casual command interface that's TCL or Ruby DSL like. I would suspect that one can also write scripts using those commands, and have ipython execute them. The key question is whether Jython now supports ipython in a useful enough fashion, ideally just through our builtin jline support (instead of requiring readline as in the patch of bug 1133). I assume William mean functools; we fully pass test_functools, which is reasonably comprehensive with 42 unit tests. - Jim On Thu, Aug 6, 2009 at 1:50 PM, Cliff Hill <xl...@da...> wrote: > It sounds like you almost want TCL syntax in Python, but I'm curious about > what the end results of your attempts would be :) > > On Thu, Aug 6, 2009 at 11:34 AM, william ratcliff < > wil...@gm...> wrote: > >> I want to start by thanking everyone for their quick responses. >> >> Keyword args are an excellent suggestion! Assuming that funcutils is in >> jython 2.5, then we can get around having to explicitly define every motor. >> >> Now, for the problem that I am trying to solve: >> >> We are a rather large facility where users come to perform experiments. >> We had an ancient piece of software (started on the VAX) used to drive the >> instrument, but it cannot handle our new instruments. Some years back, the >> control software was rewritten using a client server model. The server is >> in python and lives on a linux box. The client is in java. Part of this >> was a cross platform issue (we have people who may need to drive the >> instruments using macs, linux, or windows). Part of it was a question of >> expertise and ability to find programmers. Now, there is a command set >> implemented in Java that is then communicated to the server. >> >> Now, we would like to allow the users (scientists) to be able to have a >> scripting environment to perform experiments. Since there is already a >> client written in Java, jython would be a natural choice for a scripting >> language. However, as functionality is added by "power/expert" users in the >> form of jython modules, we would like to be able to port that functionality >> back to "regular" users. >> >> The command syntax of both the current and previous software have been of >> the form: >> "move motor4 10" >> >> so, while in jython for our "power users", they would be able to do >> something like >> move(motor4=10), I would like to avoid requiring regular users to learn >> python, but rather to just give them back commands with similar syntax to >> what they are used to. So, it sounds like I should either investigate >> whether ipython and jython play well together or look into the cmd module. >> >> Thanks, >> William >> >> >> On Thu, Aug 6, 2009 at 1:21 PM, Leo Soto M. <leo...@gm...> wrote: >> >>> On Thu, Aug 6, 2009 at 11:09 AM, Marc Downie<ma...@op...> >>> wrote: >>> [...] >>> > But this is Python — you'd define __getattr__ and __setattr__ methods >>> to let >>> > you write: >>> > mv.SampleSlit=30 >>> > or >>> > mv.motor4=10 >>> > That has the same number of characters as mv SampleSlit 30. >>> >>> Another alternative, using **kwargs: >>> >>> mv(motor4=10) >>> >>> But I'm not getting what's the idea here. If having the >>> "spaced-arguments syntax" is a hard requirement, I'd like to know what >>> are the other pieces of the problem (e.g.: why are you trying to solve >>> this using Python/Jython?) to be able to give better answers. >>> >>> -- >>> Leo Soto M. >>> http://blog.leosoto.com >>> >> >> >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day >> trial. Simplify your report design, integration and deployment - and focus >> on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users >> >> > > > -- > "I'm not responcabel fer my computer's spleling errnors" - Xlorep DarkHelm > Website: http://darkhelm.org > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > > -- Jim Baker jb...@zy... |
From: william r. <wil...@gm...> - 2009-08-06 20:27:14
|
Thanks! On Thu, Aug 6, 2009 at 4:14 PM, Jim Baker <jb...@zy...> wrote: > ipython addresses William's interests for a casual command interface that's > TCL or Ruby DSL like. I would suspect that one can also write scripts using > those commands, and have ipython execute them. The key question is whether > Jython now supports ipython in a useful enough fashion, ideally just through > our builtin jline support (instead of requiring readline as in the patch of > bug 1133). > > I assume William mean functools; we fully pass test_functools, which is > reasonably comprehensive with 42 unit tests. > > - Jim > > > On Thu, Aug 6, 2009 at 1:50 PM, Cliff Hill <xl...@da...> wrote: > >> It sounds like you almost want TCL syntax in Python, but I'm curious about >> what the end results of your attempts would be :) >> >> On Thu, Aug 6, 2009 at 11:34 AM, william ratcliff < >> wil...@gm...> wrote: >> >>> I want to start by thanking everyone for their quick responses. >>> >>> Keyword args are an excellent suggestion! Assuming that funcutils is in >>> jython 2.5, then we can get around having to explicitly define every motor. >>> >>> Now, for the problem that I am trying to solve: >>> >>> We are a rather large facility where users come to perform experiments. >>> We had an ancient piece of software (started on the VAX) used to drive the >>> instrument, but it cannot handle our new instruments. Some years back, the >>> control software was rewritten using a client server model. The server is >>> in python and lives on a linux box. The client is in java. Part of this >>> was a cross platform issue (we have people who may need to drive the >>> instruments using macs, linux, or windows). Part of it was a question of >>> expertise and ability to find programmers. Now, there is a command set >>> implemented in Java that is then communicated to the server. >>> >>> Now, we would like to allow the users (scientists) to be able to have a >>> scripting environment to perform experiments. Since there is already a >>> client written in Java, jython would be a natural choice for a scripting >>> language. However, as functionality is added by "power/expert" users in the >>> form of jython modules, we would like to be able to port that functionality >>> back to "regular" users. >>> >>> The command syntax of both the current and previous software have been of >>> the form: >>> "move motor4 10" >>> >>> so, while in jython for our "power users", they would be able to do >>> something like >>> move(motor4=10), I would like to avoid requiring regular users to learn >>> python, but rather to just give them back commands with similar syntax to >>> what they are used to. So, it sounds like I should either investigate >>> whether ipython and jython play well together or look into the cmd module. >>> >>> Thanks, >>> William >>> >>> >>> On Thu, Aug 6, 2009 at 1:21 PM, Leo Soto M. <leo...@gm...> wrote: >>> >>>> On Thu, Aug 6, 2009 at 11:09 AM, Marc Downie<ma...@op...> >>>> wrote: >>>> [...] >>>> > But this is Python — you'd define __getattr__ and __setattr__ methods >>>> to let >>>> > you write: >>>> > mv.SampleSlit=30 >>>> > or >>>> > mv.motor4=10 >>>> > That has the same number of characters as mv SampleSlit 30. >>>> >>>> Another alternative, using **kwargs: >>>> >>>> mv(motor4=10) >>>> >>>> But I'm not getting what's the idea here. If having the >>>> "spaced-arguments syntax" is a hard requirement, I'd like to know what >>>> are the other pieces of the problem (e.g.: why are you trying to solve >>>> this using Python/Jython?) to be able to give better answers. >>>> >>>> -- >>>> Leo Soto M. >>>> http://blog.leosoto.com >>>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >>> 30-Day >>> trial. Simplify your report design, integration and deployment - and >>> focus on >>> what you do best, core application coding. Discover what's new with >>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>> _______________________________________________ >>> Jython-users mailing list >>> Jyt...@li... >>> https://lists.sourceforge.net/lists/listinfo/jython-users >>> >>> >> >> >> -- >> "I'm not responcabel fer my computer's spleling errnors" - Xlorep DarkHelm >> Website: http://darkhelm.org >> >> >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day >> trial. Simplify your report design, integration and deployment - and focus >> on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users >> >> > > > -- > Jim Baker > jb...@zy... > |