OS X 命令system_profiler SPAudioDataType
给出的输出如附录 1 所示
这对我来说看起来很难解析。
例如:
- 得到
Connection
的Speaker
grep
for^\s+Connection: (.*)$
没有帮助:捕获组\1
将具有该Connection
值,但也会为未嵌套在Speaker
.
有趣的是,使用sed
. 例如,等待查看音频行,然后是扬声器行,...,然后是正则表达式以获取以下文本:
。
我可以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