2
如何在使用shlex.split()时保留“带空格的值”的引号?使用shlex.split时保留引号
s = "SOME_VAR=\"value with spaces\" VAR2=value2"
shlex.split(s)
['SOME_VAR=value with spaces', 'VAR2=value2']
谢谢
如何在使用shlex.split()时保留“带空格的值”的引号?使用shlex.split时保留引号
s = "SOME_VAR=\"value with spaces\" VAR2=value2"
shlex.split(s)
['SOME_VAR=value with spaces', 'VAR2=value2']
谢谢
你选择一个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']
好像shlex是一个实际的解析器,所以你必须要逃避特殊字符。例如,这个解析正确:“\ SOME_VAR = \\\”值\\ \\空格\\“”VAR2 = value2“'。我不知道你是怎么做的,逃避那些角色,因为你几乎必须创建一个解析器并重新实现shlex ... –
你想要维护引号的理由是什么?如果该值包含曾经引用过的空格,是否足以假设? – joeb
Salt使用shlex.split为调用msiexec的参数分割参数。 https://github.com/saltstack/salt/blob/develop/salt/modules/win_pkg.py#L1132 我想为msiexec提供一个键/值对,其中值可能包含空格。 如果删除引号,msiexec会将第一个空格之后的所有内容视为参数并失败。 – lubyou