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 <da...@ieee.org> > On 03/10/2011 01:38 AM, yuan zheng wrote: > >> Thanks for your help. >> >> >> thanks, >> yuanzheng. >> >> 2011/3/8 Dave Angel<da...@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 > >
-- http://mail.python.org/mailman/listinfo/python-list