从命令输出中获取特定数据

时间:2017-04-05 08:09:19

标签: python

我将从OSX命令输出中获取特定数据,样本 -

enter image description here

我的代码:

import os
import json
import plistlib
import subprocess
import datetime

def _LogicalDrive():

    tmp_l = []

    output = subprocess.Popen(
        "diskutil info -all", shell=True,
        stdout=subprocess.PIPE).stdout.read().splitlines()

    for x in output:
        if 'Device Identifier' in x:
            tmp_dict['Identifier'] = x.split(' ')[-1].strip()
        tmp_l.append(tmp_dict)    
    return tmp_l
print _LogicalDrive()

我想从特定密钥获取数据,例如“设备/媒体名称”或其他。

2 个答案:

答案 0 :(得分:0)

我认为您正在尝试解析命令输出并对其进行分析。你把它拆分成不同的线是好的。也许,在每一行中用“:\ s +”模式进一步拆分它,并将冒号的左侧部分存储为键,将右侧部分存储为值(可能在字典中)。您可以使用该字典来查询键(冒号的左侧部分)以获取值。

如果你用“:\ s +”存储分割模式,你可以重复使用它;或许添加一个必须指定密钥的参数。

答案 1 :(得分:0)

您可以迭代输出并将每一行拆分为:,将左侧部分作为键,右侧作为值。

def _LogicalDrive():

    tmp_l = []

    output = subprocess.Popen(
        "diskutil info -all", shell=True,
        stdout=subprocess.PIPE).stdout.read()

    for x in output.splitlines():
        try:
            key, value = [c.strip() for c in x.split(':') if ':' in x]
        except ValueError:
            continue
        if 'Device Identifier' in x:
            tmp_dict['Identifier'] = value
        tmp_l.append(tmp_dict)

    return tmp_l