2017-05-19 2 views
0

J'essaie d'obtenir une liste de tous les paquets installés sur mon système. Pour cela j'appelle 'rpm -qai' depuis un script Python où d'autres transformations sur la sortie ont lieu.Formater une sortie de requête RPM avec un séparateur

J'ai un peu couru dans le problème maintenant que la sortie de la requête ci-dessus ne sépare pas les différents paquets. Cela ressemble à ceci:

$ rpm -qai 
Name  : PackageName 
Version : 1.0 
... 
LastEntry: Something 
Name  : NextPackageName 
Version : 1.1 
... 

Ce que je veux quelque chose le long de la ligne de

Name  : PackageName 
Version : 1.0 
... 
LastEntry: Something 
//empty line or some other kind of separator 
Name  : NextPackageName 
Version : 1.1 
... 

Depuis mon script lit ligne de tout pour la ligne et enregistre les lignes dans un dictionnaire. Ma solution de contournement vérifie dès maintenant si la ligne courante commence par 'Nom' et si c'est le cas, procède à l'ajout du dictionnaire à une liste et efface le dictionnaire; cette étape est ignorée pour la toute première ligne.

Cette solution est assez moche. Malheureusement, un nombre fixe de lignes ne fonctionne pas car tous les paquets ne fournissent pas la même quantité d'informations. J'ai aussi pensé à lancer 'rpm -qai' en premier, en récupérant une liste de tous les noms de paquets, puis en parcourant la liste en appelant 'rpm -qi current_item'. Ensuite, on pourrait saisir la sortie de chaque requête. Mais comme cela nécessite deux passages, je considère que cela ne nécessite pas de travail supplémentaire.

Alors, RPM (ou un autre outil) fournit-il une fonctionnalité qui permettrait la sortie désirée?

Répondre

0

Il existe des liaisons python pour l'interfaçage RPMDB "correct" au lieu d'analyser la sortie "rpm". Pensez-y comme la porcelaine de git vs la plomberie. En fait, yum est tout python (la dernière fois que j'ai vérifié). Je pense que ce sera mieux pour vous à long terme.

This documentation pourrait être un bon début.

+0

Ceci est une bonne suggestion, mais pas vraiment une réponse. –