【问题标题】:Preserve quotes when using shlex.split使用 shlex.split 时保留引号
【发布时间】:2017-04-22 20:40:06
【问题描述】:

如何在使用 shlex.split() 时保留“带空格的值”周围的引号?

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

谢谢

【问题讨论】:

  • 似乎 shlex 是一个实际的解析器,所以你必须转义特殊字符。例如,这会正确解析:"SOME_VAR=\\\"value\\ with\\ spaces\\\" VAR2=value2"。我不确切知道你怎么能做和逃避这些字符,因为你几乎必须创建一个解析器并重新实现 shlex...
  • 您希望保留报价的原因是什么?如果该值包含最初引用的空格,是否足以假设?
  • Salt 使用 shlex.split 来拆分参数以调用 msiexec。 github.com/saltstack/salt/blob/develop/salt/modules/… 我正在尝试向 msiexec 提供一个键/值对,其中值可能包含空格。如果引号被删除,msiexec 将第一个空格之后的所有内容视为参数并失败。

标签: python shlex


【解决方案1】:

您选择的 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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2011-10-15
    • 2021-07-15
    • 1970-01-01
    • 2014-04-08
    • 2017-08-12
    • 1970-01-01
    相关资源
    最近更新 更多