A question about Cmd Class

yuan zheng tsinghuayuan86 at gmail.com
Thu Mar 10 04:10:33 EST 2011


As you said, I am not writting a linux shell. Our requirements
need this kind of commands.

Certernly,  the convert_table can sovle the command problem.
But it cannot complete correctly when using "TAB". It will complete
"show_info".

My first email expains my problem: I can implement commands with '-',
but I can't let completion works well.


thanks,
yuanzheng.

2011/3/10 Dave Angel <davea at ieee.org>

> On 03/10/2011 01:38 AM, yuan zheng wrote:
>
>> Thanks for your help.
>>
>>
>> thanks,
>> yuanzheng.
>>
>> 2011/3/8 Dave Angel<davea at ieee.org>
>>
>>  On 01/-10/-28163 02:59 PM, yuan zheng wrote:
>>>
>>>  Hello, everyone:
>>>>
>>>>     I encouter a question when implementing a commmand line(shell).
>>>> I have implemented some commands, such as "start", "stop", "quit",
>>>> they are easily implemented by "do_start", "do_stop" and "do_quit".
>>>> there are no troubles.
>>>>      But I want to implement some commands like these "list-modules",
>>>> "show-info". There is a character "-" among the string. So I can't
>>>> easily
>>>> use "do_list-modules", because the name is invalid. I attempt another
>>>> ways, add a sentense in function "cmd.onecmd":
>>>> -------------------------------------------------------
>>>>    def onecmd(self, line):
>>>>         line = line.replace("-", "_")         # I add
>>>>     ...
>>>> -------------------------------------------------------
>>>> Then, I can use "do_list_modules" to mach "list-modules" command. But in
>>>> this way, completion cannot work correctly. If I input "list-", and then
>>>> "tab",
>>>> it would not complete.
>>>>
>>>> If my way is correct when encoutering commands with "-" ?
>>>> If it's correct, how can I implement completion to work correctly?
>>>>
>>>>
>>>>
>>>> thanks,
>>>> yuanzheng.
>>>>
>>>>
>>>>  The problem with the replace() is that if there are any other dashes in
>>> the
>>> command, you'll replace them as well.  Further, there are lots of other
>>> characters that are legal in program names that are not legal in variable
>>> names.
>>>
>>> My commands have just one '-', so I don't worry this problem.
>>>
>>
>>
> So what are these commands, and how is the shell used?  Could you give us
> more than a trivial fragment of working code?  Since you say you're running
> Linux, are you saying users of your shell wouldn't be able to use a command
> like
>    ls -l
>
> in your shell, because it has a dash in the argument string?
>
> BTW, when adding your own comments to quoted text, always use a new line,
> so your own comments do not have a leading ">" character. Otherwise it gets
> quite confusing.
>
> Maybe you're not writing a Linux shell at all, but a shell just to run
> other python "commands" that you've written.  If that's the case, why not
> select names that python will like, and run them directly?  For that matter,
> why have a do_ prefix at all?  If the command is called list_modules, let
> them type list_modules, and call the function list_modules().
>
> If that's just not feasible, you could just make a map converting the names
> they type to the actual function objects.  If you like your present names,
> the map might look like:
>
> convert_table = { "start": do_start, "stop": do_stop, "quit", do_quit,
> "show-info": do_show_info }
>
> Then your dispatch would be something like
>  cmd = lines.split()[0]
>  convert_table[cmd] (arg1, arg2)
>
> DaveA
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20110310/64215d93/attachment-0001.html>


More information about the Python-list mailing list