2017-04-05 6 views
0

から特定のデータを取得 -サンプル、私は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() 

を私は特定のキーからデータを取得したいです、 「デバイス/メディア名」などのように。

+0

あなたのコードでは何が動作していませんか?あなたが得たアウトプットは何ですか?代わりに何が期待されていますか? –

+0

出力画像は "https://i.stack.imgur.com/ZNM1b.png" – DKmolko

+0

私のコードは私が望むものではないすべての項目を取得します – DKmolko

答えて

0

私はコマンドの出力を解析して分析しようとしていると思います。あなたはそれを別々の行に分けています。おそらく、各行でそれを ":\ s +"パターンでさらに分割し、コロンの左部分をキーとして、そして右部分を(おそらく辞書に)値として格納するかもしれません。その辞書を使用して、値を取得するためにキー(コロンの左部分)を照会することができます。

":\ s +"で分割するパターンを保存すると、再利用することができます。 keyを指定しなければならない場合には、引数をもう1つ追加してください。

+0

サンプルコードを提供できますか?私はPythonの形式データについては貧弱です – DKmolko

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 
+0

何かが間違っています:x.split( ':')]のcのためのキー、値= [c.strip()]、ValueError:解凍するには1つ以上の値が必要です – DKmolko

+0

私の答えが更新されました。空白行は世話しませんでした。 –

+0

申し訳ありませんが、 "ValueError:解凍するには0以上の値が必要です"と表示されました。 – DKmolko

関連する問題