1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| def getLinuxShellCommandResult(command=['ls', '-a'], path = '.', clean=lambda _:_.strip(), filter=lambda _:True):
u"""Retourne la sortie de la commande command sous forme d'une liste de chaînes,
None en cas d'erreur (masque éventuellement le message d'erreur du shell)
@param command: La commande (peut intégrer un path). par défaut, ['ls', '-l']
@type command: list of str
@param path: Un path éventuel, par défaut le répertoire courant '.'
@type path: str
@param clean: Une fonction de nettoyage, par défaut str.strip()
@type clean: function qui prend une str et renvoie une str
@param filter: Une fonction de filtrage, par défaut ne fait rien
@type filter: function qui prend une str et renvoie un bool
@return: Liste de lignes renvoyées ou None
@rtype: list of str
"""
p = subprocess.Popen(args=command + [path]
, stdout=subprocess.PIPE
, stderr=subprocess.STDOUT)
return [[clean(_) for _ in p.stdout.readlines() if filter(_)], None][p.wait() != 0]
#Par défaut
lines = getLinuxShellCommandResult()
print lines and '\n'.join(lines)
#ls -l autre path
lines = getLinuxShellCommandResult(command=['ls', '-l'], path='/usr')
print lines and '\n'.join(lines)
#Juste le premier 'mot'
lines = getLinuxShellCommandResult(command=['ls', '-l']
, clean=lambda _:_.strip().split()[0])
print lines and '\n'.join(lines)
#vire les lignes vides et la ligne "total XX"
lines = getLinuxShellCommandResult(command=['ls', '-l']
, filter=lambda _:_.strip().split()[0].lower() not in ['total', ''])
print lines and '\n'.join(lines)
#Renvoie uniquement les noms (sans les fichiers cachés)
lines = getLinuxShellCommandResult(command=['ls', '-l']
, clean=lambda _:_.strip().split()[-1]
, filter=lambda _:_.strip().split()[0].lower() not in ['total', ''])
print lines and '\n'.join(lines)
#Renvoie uniquement les noms (avec les fichiers cachés)
lines = getLinuxShellCommandResult(filter=lambda _:_.strip().split()[0].lower() not in ['.', '..'])
print lines and '\n'.join(lines) |
Partager