Michael Barton wrote: > >>>> GRASS command parsing from the wxgrass CLI: > >>>> > >>>> Split the command into a list by spaces. I realize that this is a problem > >>>> for any command with spaces in the arguments, but I know of no better way > >>>> to > >>>> do this in this context outside of making users type any command as a > >>>> Python > >>>> list. If we made people type ['g.region', 'rast=mymap', 'res=30'] instead > >>>> of > >>>> g.region rast=mymap res=30, I don't think anyone would want to use the > >>>> CLI. > >>> > >>> This is one case where shell=True *is* legitimate. At least with a > >>> shell, the user can use quotes or backslashes to include spaces in > >>> arguments. Or you could implement equivalent functionality yourself. > >> > >> IIUC, if I keep these as strings, I don't think I can use the cmd.Command > >> class and would have to do a custom version of Popen. Then I'd have to send > >> them through a different processing path rather than the RunCmd method that > >> everything else uses. > > > > One option is to call the shell explicitly, i.e.: > > > > cmd.Command(['/bin/sh', '-c', cmdstr], ....) > > > > or (on Windows): > > > > cmd.Command(['cmd', '/c', cmdstr], ...) > > > > Simply adding quoting to the existing implementation would probably be > > preferable, though. > > Martin, > > Is this change in cmd.Command easy to implement?
The above isn't a change to cmd.Command(), but a change to how it is used. If you were to change cmd.Command(), the obvious change would be to add a shell= parameter, which would be propagated directly to Popen(). Ultimately, if all you have is a single string provided by the user, that string somehow has to be converted to a list of strings (as that's what argv[] is). The options are: 1. Split at each space. 2. As for 1, but with a quoting and/or escaping mechanism. 3. Use the shell. 1 fails to handle arguments which contain spaces. 2 solves this, but requires some work. 3 gets the shell to do the work, but the cost is that you get a lot of other stuff which you may not want (substitution, redirection, loops, subshells, ...). -- Glynn Clements <[EMAIL PROTECTED]> _______________________________________________ grass-dev mailing list [email protected] http://grass.itc.it/mailman/listinfo/grass-dev

