2016-12-07 2 views
2

Как сохранить кавычки вокруг «значения с пробелами» при использовании shlex.split()?Сохранять котировки при использовании shlex.split

s = "SOME_VAR=\"value with spaces\" VAR2=value2" 
shlex.split(s) 
['SOME_VAR=value with spaces', 'VAR2=value2'] 

Спасибо

+0

Похоже shlex является актуальной парсер, так что вам придется бежать специальные символы. Например, это правильно анализирует: «SOME_VAR = \\\» значение \\ с \\ пробелами \\\ "VAR2 = значение2" '. Я не знаю точно, как вы могли бы это сделать и избежать этих символов, так как вам в значительной степени придется создать парсер и повторно реализовать shlex ... –

+1

Каковы ваши аргументы в пользу сохранения котировок? Достаточно ли предположить, что если значение содержит пробелы, которые он когда-то первоначально цитировал? – joeb

+0

Соль использует shlex.split для разделения параметров для вызовов на msiexec. https://github.com/saltstack/salt/blob/develop/salt/modules/win_pkg.py#L1132 Я пытаюсь предоставить пару ключ/значение для msiexec, где значение может содержать пробелы. Если кавычки удалены, msiexec обрабатывает все после первого пробела как параметр и терпит неудачу. – lubyou

ответ

0

Ваш выбор инструмента Python не может быть оптимальным.

Как насчет:

$ cat /tmp/tmp.py 
import csv 
import StringIO 

s = "SOME_VAR=\"value with spaces\" VAR2=value2" 
reader = csv.reader(StringIO.StringIO(s), csv.excel) 

for i in reader: 
    print i 

$ python /tmp/tmp.py 
['SOME_VAR="value with spaces" VAR2=value2'] 
Смежные вопросы