OVH Cloud OVH Cloud

parser la sortie de sytem profiler

5 réponses
Avatar
pere.noel
je voudrais pouvoir disposer des infos données par system profiler sous
ruby, j'écris don une extension ruby, en C, pour ça )))

c'est un bon exercice )))

mais bon 1ier problème, je trouve que le format de la sortie
(indentation) est bizarre, un extrait :

------------------------------------------------------------------------
Hardware:

Hardware Overview:

Machine Name: iMac G5
Machine Model: PowerMac8,1
[...]

Network:

Modem interne:

Type: PPP (PPPSerial)
Hardware: Modem
[...]
------------------------------------------------------------------------

là, au départ pas de pb pour s'y retrouver : je dis avoir qqc de neuf si
l'identation augmente, quand elle retombe à 0 j'ai un autre "chaître".


mais il y a des cas, plus sioux à détecter :

autre exemple :
------------------------------------------------------------------------

Audio (Built In):

Built In Sound Card:

Devices:
Burr Brown PCM3052:
Inputs and Outputs:
Internal Microphone:
Controls: Mute, Master
Playthrough: No
PluginID: Onyx
Line Level Input:
Controls: Mute, Master
[...]
Line Level Output:
Controls: Mute, Left, Right
PluginID: Onyx
Formats:
PCM 16:
Bit Depth: 16
[...]
------------------------------------------------------------------------

là pour dire que je passe de "Devices" à "Formats" et non de "Line Level
Output" à "Formats", je dois compter les espaces (heureusement ce ne
sont pas des \t) et de mettre le nombre d'espaces de un tableau mise à
jour au fur et à mesure.

ça roule MAIS je trouve ça "bricolot" car même le nombre d'espaces peut
varier d'un champs à l'autre (heureusement pas à l'intérieur d'un
champs).


j'ai sans doute loupé qqc, notez que j'ai regardé la sortie xml de
system_profiler, c'est très différent de la sortie std.


ensuite il y a au niveau du nommage des bus USB un doublon, disons que
comme il t a deux bus, ils portent le même nom mais ont une adresse et
un contenu différent.

bon voila, si vous avez qq infos sur comment parser ce genre de ce
sortie, ou si j'ai loupé qqx (par ex un utilitaire macos x qui ferait ce
travail) ...
--
une bévue

5 réponses

Avatar
luc
Une bévue wrote:

je voudrais pouvoir disposer des infos données par system profiler sous
ruby, j'écris don une extension ruby, en C, pour ça )))


Une extension C pour ça ?!!?? Et après je me fais engueuler quand je dis
que tu es du genre à te compliquer atrocement la vie pour rien... :>

La command system_profiler peut cracher du XML à la sauce PList si on
lui passe l'option -xml. Donc soit tu as le module plist (sudo gem
install plist) et tu peux juste faire:

require 'plist'
xml = `system_profiler -xml`
profile = Plist::parse_xml(xml)

Soit tu n'as pas l'extension plist et il faut parser à la main:

require 'rexml/document'
xml = `system_profiler -xml`
profile = REXML::Document.new(xml)
...

--
Luc Heinrich

Avatar
pere.noel
Luc Heinrich wrote:

Une extension C pour ça ?!!?? Et après je me fais engueuler quand je dis
que tu es du genre à te compliquer atrocement la vie pour rien... :>


je ne t'ai jamais enguelé me semble-t'il ))

euh ok pour plist à condition d'avoir qqc pour faire un search sur le
résultat, j'ai plist installé et déjà utilisé,REXML aussi.

j'ai vu ça comme un exercice...

mais tu as raison j'ai tendance à faire compliqué quand on peut simple.

donc toi tu considères que la sortie de system_profiler (tout court)
c'est juste un print-out, pas besoin d'être structuré nickel-chrome ?
--
une bévue

Avatar
luc
Une bévue wrote:

donc toi tu considères que la sortie de system_profiler (tout court)
c'est juste un print-out, pas besoin d'être structuré nickel-chrome ?


Désolé, je ne comprends pas la question :)

--
Luc Heinrich

Avatar
pere.noel
Luc Heinrich wrote:

donc toi tu considères que la sortie de system_profiler (tout court)
c'est juste un print-out, pas besoin d'être structuré nickel-chrome ?


Désolé, je ne comprends pas la question :)


ben parce que ma question était là-dessus, comme la sortie (mode text)
de system_profiler a une indentation NON régulière (faite avec des
espaces), c'est une difficulté pour décripter cette sortie.

toi tu penses (mis à part le fait que plist existe sous ruby) qu'il ne
faut pas exploiter cette sortie en mode texte car, disons, c'est "juste"
un print-out, pas un truc à parser et que, consèquence, il faut
nécessairement en passe par une plist, qui elle, avec sa dtd etc est
nécesairement bien formatée ???
--
une bévue


Avatar
luc
Une bévue wrote:

toi tu penses (mis à part le fait que plist existe sous ruby) qu'il ne
faut pas exploiter cette sortie en mode texte car, disons, c'est "juste"
un print-out, pas un truc à parser et que, consèquence, il faut
nécessairement en passe par une plist, qui elle, avec sa dtd etc est
nécesairement bien formatée ???


Voilà, exactement.

--
Luc Heinrich