2016-12-07 33 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 = value2「'。我不知道你是怎麼做的,逃避那些角色,因爲你幾乎必須創建一個解析器並重新實現shlex ... –

+1

你想要維護引號的理由是什麼?如果該值包含曾經引用過的空格,是否足以假設? – joeb

+0

Salt使用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'] 
相關問題