【问题标题】:parse key=val list where space has dual meaning (separator and part of val)解析 key=val 列表,其中空格具有双重含义(分隔符和 val 的一部分)
【发布时间】:2020-04-20 09:39:39
【问题描述】:

我正在寻找通过直接解析ps eww输出从远程进程中提取环境变量(表示有诸如psutils之类的库但我宁愿不使用它们)

例如:

如果我运行a="foo bar" b=b sleep 100 而不是ps eww | grep sleep 将返回类似:

sleep 100 a=foo bar b=b ...

所以这种情况下的输出应该是:

dict = {"a" : "foo bar", b" : "b" }

到目前为止,我只是根据默认的空格分隔符获取此输出并使用split。但是空格是一个有效的参数(注意空格也可以是值的一部分,也可以是 key=val 格式的 2 个变量之间的分隔符。

知道谁将它拆分为 key=val 结构,以便空格也是值名称的有效字符(但对键名称无效)?

【问题讨论】:

  • 这个dict是psutil.Process().environ直接给你的,你不必担心环境变量的值包含特殊字符(空格、换行符、=)。你为什么不想使用它?

标签: python linux macos parsing environment-variables


【解决方案1】:

你可以用空格分割输入字符串(就像你做的那样)。然后对于每个子字符串,检查它是否包含= 字符。如果是这样,请将其添加为新的键值对;如果不是,则将子字符串附加到前一个键的值。

代码:

dict = {}
key = ''
for s in input.split():
  if '=' in s:
    key, val = s.split('=')
    dict.update({key : val})
  else:
    if key in dict:
      dict[key] += ' ' + s

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多