2016-12-07 34 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'] 
相关问题