Re: cmd all commands method?

2007-02-19 Thread Gabriel Genellina
En Mon, 19 Feb 2007 00:08:45 -0300, placid <[EMAIL PROTECTED]> escribió:

> If anyone can provide a suggestion to replicate the following Tcl
> command in Python, i would greatly appreciate it.
>
> namespace eval foo {
> variable bar 12345
> }
>
> what this does is create a namespace foo with the variable bar set to
> 12345.

Python namespaces are simple dictionaries. See the eval function.

py> s = "3+x**2"
py> freevars = {"x": 2}
py> eval(s, {}, freevars)
7

-- 
Gabriel Genellina

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cmd all commands method?

2007-02-18 Thread placid
On Feb 18, 8:59 pm, "Michele Simionato" <[EMAIL PROTECTED]>
wrote:
> On Feb 18, 10:49 am, "placid" <[EMAIL PROTECTED]> wrote:
>
> > On Feb 18, 7:17 pm, "Michele Simionato" <[EMAIL PROTECTED]>
>
> > > Yes, he is talking about the cmd 
> > > module:http://docs.python.org/dev/lib/Cmd-objects.html.
> > > However that module was never intended as a real interpreter, so
> > > defining variables
> > > as the OP wants would require some work.
>
> > >  Michele Simionato
>
> > How much work does it require ?
>
> Have you ever written an interpreter? It is a nontrivial job.
>
> Michele Simionato

No i have never written an interpreter and i can just imagine how much
work/effort is needed to write something like that.

If anyone can provide a suggestion to replicate the following Tcl
command in Python, i would greatly appreciate it.

namespace eval foo {
variable bar 12345
}

what this does is create a namespace foo with the variable bar set to
12345.

http://aspn.activestate.com/ASPN/docs/ActiveTcl/8.4/tcl/TclCmd/variable.htm

The code provided by Peter Otten is a good start for me. Cheers for
that!


Cheers

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cmd all commands method?

2007-02-18 Thread Michele Simionato
On Feb 18, 10:49 am, "placid" <[EMAIL PROTECTED]> wrote:
> On Feb 18, 7:17 pm, "Michele Simionato" <[EMAIL PROTECTED]>
>
> > Yes, he is talking about the cmd 
> > module:http://docs.python.org/dev/lib/Cmd-objects.html.
> > However that module was never intended as a real interpreter, so
> > defining variables
> > as the OP wants would require some work.
>
> >  Michele Simionato
>
> How much work does it require ?

Have you ever written an interpreter? It is a nontrivial job.

Michele Simionato

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cmd all commands method?

2007-02-18 Thread Peter Otten
placid wrote:

> On Feb 18, 7:17 pm, "Michele Simionato" <[EMAIL PROTECTED]>
> wrote:
>> On Feb 17, 11:44 pm, Bjoern Schliessmann >
>>
>>
>> [EMAIL PROTECTED]> wrote:
>> > placid wrote:
>> > > if i want to treat every cmdloop prompt entry as a potential
>> > > command then i need to overwrite the default() method ?
>>
>> > Excuse me, what's a cmdloop prompt? What's the "default() method"?
>>
>> > > What i want to achieve is to be able to support global variable
>> > > creation for example;
>>
>> > > res = sum 1 2
>>
>> > > this would create a variable res with the result of the method
>> > > do_sum() ?
>>
>> > > then would i be able to run;
>>
>> > > sum a  5
>>
>> > > this would return 8 or an error saying that res is not defined
>>
>> > Are you sure you're talking about Python here?
>>
>> Yes, he is talking about the cmd
>> module:http://docs.python.org/dev/lib/Cmd-objects.html. However that
>> module was never intended as a real interpreter, so defining variables
>> as the OP wants would require some work.
>>
>>  Michele Simionato
> 
> How much work does it require ?

Too much. However, here's how far I got:

import cmd
import shlex

DEFAULT_TARGET = "_"

def number(arg):
for convert in int, float:
try:
return convert(arg)
except ValueError:
pass
return arg

class MyCmd(cmd.Cmd):
def __init__(self, *args, **kw):
cmd.Cmd.__init__(self, *args, **kw)
self.namespace = {}
self.target = DEFAULT_TARGET
def precmd(self, line):
parts = line.split(None, 2)
if len(parts) == 3 and parts[1] == "=":
self.target = parts[0]
return parts[2]
self.target = DEFAULT_TARGET
return line
def resolve(self, arg):
args = shlex.split(arg)
result = []
for arg in args:
try:
value = self.namespace[arg]
except KeyError:
value = number(arg)
result.append(value)
return result
def calc(self, func, arg):
try:
result = self.namespace[self.target] = func(self.resolve(arg))
except Exception, e:
print e
else:
print result

def do_sum(self, arg):
self.calc(sum, arg)
def do_max(self, arg):
self.calc(max, arg)
def do_print(self, arg):
print " ".join(str(arg) for arg in self.resolve(arg))
def do_values(self, arg):
pairs = sorted(self.namespace.iteritems())
print "\n".join("%s = %s" % nv for nv in pairs)
def do_EOF(self, arg):
return True

if __name__ == "__main__":
c = MyCmd()
c.cmdloop()

Peter

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cmd all commands method?

2007-02-18 Thread placid
On Feb 18, 7:17 pm, "Michele Simionato" <[EMAIL PROTECTED]>
wrote:
> On Feb 17, 11:44 pm, Bjoern Schliessmann 
>
>
> [EMAIL PROTECTED]> wrote:
> > placid wrote:
> > > if i want to treat every cmdloop prompt entry as a potential
> > > command then i need to overwrite the default() method ?
>
> > Excuse me, what's a cmdloop prompt? What's the "default() method"?
>
> > > What i want to achieve is to be able to support global variable
> > > creation for example;
>
> > > res = sum 1 2
>
> > > this would create a variable res with the result of the method
> > > do_sum() ?
>
> > > then would i be able to run;
>
> > > sum a  5
>
> > > this would return 8 or an error saying that res is not defined
>
> > Are you sure you're talking about Python here?
>
> Yes, he is talking about the cmd 
> module:http://docs.python.org/dev/lib/Cmd-objects.html.
> However that module was never intended as a real interpreter, so
> defining variables
> as the OP wants would require some work.
>
>  Michele Simionato

How much work does it require ?

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cmd all commands method?

2007-02-18 Thread Michele Simionato
On Feb 17, 11:44 pm, Bjoern Schliessmann  wrote:
> placid wrote:
> > if i want to treat every cmdloop prompt entry as a potential
> > command then i need to overwrite the default() method ?
>
> Excuse me, what's a cmdloop prompt? What's the "default() method"?
>
> > What i want to achieve is to be able to support global variable
> > creation for example;
>
> > res = sum 1 2
>
> > this would create a variable res with the result of the method
> > do_sum() ?
>
> > then would i be able to run;
>
> > sum a  5
>
> > this would return 8 or an error saying that res is not defined
>
> Are you sure you're talking about Python here?


Yes, he is talking about the cmd module: 
http://docs.python.org/dev/lib/Cmd-objects.html.
However that module was never intended as a real interpreter, so
defining variables
as the OP wants would require some work.

 Michele Simionato

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cmd all commands method?

2007-02-17 Thread Bjoern Schliessmann
placid wrote:

> if i want to treat every cmdloop prompt entry as a potential
> command then i need to overwrite the default() method ?

Excuse me, what's a cmdloop prompt? What's the "default() method"?
 
> What i want to achieve is to be able to support global variable
> creation for example;
> 
> res = sum 1 2
> 
> this would create a variable res with the result of the method
> do_sum() ?
> 
> then would i be able to run;
> 
> sum a  5
> 
> this would return 8 or an error saying that res is not defined

Are you sure you're talking about Python here?

Regards,


Björn

-- 
BOFH excuse #7:

poor power conditioning

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: cmd all commands method?

2007-02-17 Thread placid

placid wrote:
> Hi all,
>
> if i want to treat every cmdloop prompt entry as a potential command
> then i need to overwrite the default() method ?
>
> What i want to achieve is to be able to support global variable
> creation for example;
>
> res = sum 1 2
>
> this would create a variable res with the result of the method
> do_sum() ?
>
> then would i be able to run;
>
> sum a  5

this should have been,

sum res 5

>
> this would return 8 or an error saying that res is not defined
>
>
> Cheers

-- 
http://mail.python.org/mailman/listinfo/python-list


cmd all commands method?

2007-02-17 Thread placid
Hi all,

if i want to treat every cmdloop prompt entry as a potential command
then i need to overwrite the default() method ?

What i want to achieve is to be able to support global variable
creation for example;

res = sum 1 2

this would create a variable res with the result of the method
do_sum() ?

then would i be able to run;

sum a  5

this would return 8 or an error saying that res is not defined


Cheers

-- 
http://mail.python.org/mailman/listinfo/python-list