Sous Linux, la commande ps aux génère une liste de processus avec plusieurs colonnes pour chaque statistique. par exemple.Division de la sortie de ps à l'aide de Python
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
postfix 22611 0.0 0.2 54136 2544 ? S 15:26 0:00 pickup -l -t fifo -u
apache 22920 0.0 1.5 198340 16588 ? S 09:58 0:05 /usr/sbin/httpd
Je veux être en mesure de lire ceci en utilisant Python et divisé sur chaque ligne et chaque colonne afin qu'ils puissent être utilisés comme valeurs.
Pour la plupart, ce n'est pas un problème: pour obtenir chaque ligne et le diviser par des espaces, par exemple
sep = re.compile('[\s]+')
for row in processes:
print sep.split(row)
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = ps.split('\n')
Je peux maintenant boucle à travers les processus Cependant, le problème est que la dernière colonne, la commande, a parfois des espaces dans. Dans l'exemple ci-dessus, cela peut être vu dans la commande
pickup -l -t fifo -u
qui serait divisé comme
['postfix', '22611', '0.0', '0.2', '54136', '2544', '?', 'S', '15:26', '0:00', 'pickup', '-l', '-t', 'fifo', '-u']
mais je veux vraiment comme:
['postfix', '22611', '0.0', '0.2', '54136', '2544', '?', 'S', '15:26', '0:00', 'pickup -l -t fifo -u']
Donc ma question est, comment puis-je diviser les colonnes, mais quand il vient à la colonne de commande, garder la chaîne entière comme un élément de la liste plutôt que de séparer par des espaces?
Ne fais pas ça. La sortie ps est ** NOT ** destinée à être lisible par machine. Creusez ces informations sur le système de fichiers/proc, ou utilisez PSI, comme suggéré par vartec. – Juliano
Pourquoi n'est-il pas censé être lisible par une machine? – DavidM
David, je pense que Juliano veut simplement dire que la sortie du PS varie énormément (comme vous l'avez souligné, la chaîne de commande est divisée en plusieurs parties par votre regex et il n'y a aucun moyen que le programme sache cela). serait plus facile pour vous d'utiliser le/proc fs ou PSI. Ce n'est pas que c'est * PAS MACHINE LISIBLE * c'est que ce sera une douleur à faire. – sholsapp