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