On 07/28/2011 02:27 AM, Steven D'Aprano wrote:
Karim wrote:
Hello All,
I would like to parse this TCL command line with shlex:
'-option1 [get_rule A1 B2] -option2 $VAR -option3 TAG'
And I want to get the splitted list:
['-option1', '[get_rule A1 B2]', '-option2', '$VAR', '-option3',
'TAG']
Then I will gather in tuple 2 by 2 the arguments.
I tried to the shlec properties attributes 'quotes', 'whitespace',
etc...
I don't understand what you are doing here. Please show the code you use.
The shlex module doesn't support bracketed expressions. I recommend
you write a post-processor. Start with doing this:
>>> import shlex
>>> text = '-option1 [get_rule A1 B2] -option2 $VAR -option3 TAG'
>>> shlex.split(text)
['-option1', '[get_rule', 'A1', 'B2]', '-option2', '$VAR', '-option3',
'TAG']
then take that list and reassemble the pieces starting with '[' until
']' Something like this, untested:
def reassemble(items):
result = []
bracketed = False
current = ''
for item in items:
if item.startswith('['):
bracketed = True
if bracketed:
current += item
if item.endswith(']'):
bracketed = False
result.append(current)
current = ''
else:
result.append(item)
return result
Yes Steven this is the kind of code I wrote in a post earlier, but I
forget to reinit as you did current equal to _token in my code, thanks
for that for showing me to simply if/elif/elif/else levels:
Previous code was:
"I ended up with this and gave up with shlex:"
split = ['-option1', '[get_rule', 'A1', 'B2]', '-option2', '$VAR',
'-option3', 'TAG']
procedure_found = False
result = []
for token in split:
if not token.startswith('[') and not token.endswith(']') and not
procedure_found:
result.append(token)
elif token.startswith('['):
procedure_found = True
_token = token
elif token.endswith(']'):
procedure_found = False
_token += ' ' + token
result.append(_token)
else:
_token += ' ' + token
print split
print result
But I make 'choux blanc'.
I don't know what that means.
This means 'white cabbage' in french = 'unsuccessful try'
Cheers
Karim
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor