2017-07-11 1 views
3

ich einige Code haben die Linux 'df -h', die normale Befehlszeile Ausgabe sieht wie folgt zu analysieren:Python Regex re.search zur Liste

Filesystem  Size Used Avail Use% Mounted on 
udev   987M  0 987M 0% /dev 
tmpfs   201M 9.2M 191M 5% /run 
/dev/sda1  38G 11G 25G 30%/
tmpfs   1001M 416K 1000M 1% /dev/shm 
tmpfs   5.0M  0 5.0M 0% /run/lock 
tmpfs   1001M  0 1001M 0% /sys/fs/cgroup 
tmpfs   201M 28K 201M 1% /run/user/132 
tmpfs   201M 28K 201M 1% /run/user/0 

Derzeit mein Code erreicht die gewünschte Ausgabe:

['/run', '/run/lock', '/run/user/132', '/run/user/0'] 

Aber die 'print ([x.split ("") [- 1] für x in der neuen Liste)' Zeile unten fühlt sich an wie ein Hack, ich kämpfe um das funktioniert als Regex mit ' r.search 'unten, kann jemand bitte einen besseren Weg raten, dies zu tun?

import subprocess 
import re 


cmd = 'df -h' 
output = subprocess.check_output(cmd, shell=True).decode('utf8') 
ln = output.split('\n') 
r = re.compile('/run.*') 
newlist = list(filter(r.search, ln)) 

print ([x.split(" ")[-1] for x in newlist]) 

bearbeiten * I als einige zufällige Ausgang ‚df -h‘ bin mit regex auf, so zu üben, während @romanPerekhrest die besten realen Welt Lösung für dieses Problem bietet ich für eine regex Lösung suchen.

+1

Eigentlich glaube ich, Ihre Lösung besser tha ist n regexp (und fast sicher schneller). –

Antwort

2

wie etwa

re.findall(r'/run.*$', output, re.MULTILINE) 

Ich weiß nicht, über eine bessere oder Geschwindigkeit, aber es schneidet den Code bis zu 3 Zeilen, und du bist regexing sowieso.

+0

Dank dafür, das ist genau das, was ich erreichen wollte! – biscuitlover

+0

aber um fair zu sein, die man durch @romanPerekhrest ist objektiv besser. – Stael

+0

in die Tat, ich habe bearbeitet zu meiner ursprünglichen Frage zur Klärung gemacht. – biscuitlover

3

Der schnellste Ansatz:

df -h --output=target | grep '/run.*' 

Der Ausgang:

/run 
/run/lock 
/run/user/132 
/run/user/0 

  • --output=target - zur Ausgabe nur Einhängepunkte
+0

Dank dafür, aber ich bin mit dem ‚df‘ Werkzeug als Praxis für cmd Ausgabe in Python – biscuitlover

+0

@biscuitlover Parsen, es ist ganz einfach: Wenn Sie in Python bleiben wollen, wird Ihre aktuelle Skript würde 'cmd =„df vereinfacht werden - h --output = Ziel | grep '/run.*' " output = subprocess.check_output (cmd, shell = Wahr) .decode ('utf8') lines = output.split ('\ n')' – RomanPerekhrest

+0

viele dank für diese – biscuitlover