OS X コマンドsystem_profiler SPAudioDataType
は、付録 1 に示す出力を提供します。
これは私には解析が非常に難しいようです。
例えば:
Connection
の取得Speaker
grep
for^\s+Connection: (.*)$
は役に立ちません: キャプチャ グループ\1
には値がありますが、下にネストされていないConnection
行の値も取得されます。Speaker
興味深いことに、 で解析する方が簡単かもしれませんsed
。たとえば、Audio の行、Speaker の行、...、次のテキストの正規表現が表示されるのを待ちます:
。
grep
MULTILINE
テキスト全体で最初に一致Speaker
し、次にConnection
改行/空白をスキップできます。
さまざまなインデントのテキスト行からネストされたノードのオブジェクト モデルを構築するライブラリはありますか?
CSS のセレクターに似たオブジェクト モデルを照会する方法はありますか? 例えばAudio > Speaker > Connection > Value
YAML が空白を考慮する方法は気に入っていますが、これは YAML として解析されません。
Java または Python のライブラリは、学習に最適です。
私は自分で何かをコーディングしていたので、次のように質問することにしました。
def main():
c = 0
with open(sys.argv[1]) as f:
for l in (l.rstrip() for l in f):
m = l.lstrip()
if not m:
continue
i = len(l) - len(m)
if i < c:
pass # Towards parent
elif i > c:
pass # A child
else:
pass # A sibling
c = i
最初のノードがインデントされていると仮定し、表示された0
すべてのインデント レベルを記憶して、以前のレベルと比較してインデントが減少しているノードをその親に、または上位レベルのネストの兄弟として再接続できるようにする必要があると思います。
付録1
Audio:
Intel High Definition Audio:
Audio ID: 29
Headphone:
Connection: Combination Output
Speaker:
Connection: Internal
Line Input:
Connection: Combination Input
Internal Microphone:
Connection: Internal
S/PDIF Optical Digital Audio Input:
Connection: Combination Input
S/PDIF Optical Digital Audio Output:
Connection: Combination Output
External Microphone / iPhone Headset:
Connection: Combination Output
HDMI / DisplayPort Output:
Connection: Display
Devices:
Built-in Microphone:
Default Input Device: Yes
Input Channels: 2
Manufacturer: Apple Inc.
Current SampleRate: 44100
Transport: Built-in
Built-in Input:
Input Channels: 2
Manufacturer: Apple Inc.
Current SampleRate: 44100
Transport: Built-in
Built-in Output:
Default Output Device: Yes
Default System Output Device: Yes
Manufacturer: Apple Inc.
Output Channels: 2
Current SampleRate: 44100
Transport: Built-in