Ik heb het zo opgelost. Je gebruikt best niet te veel rechtstreekse commando's als grep (wat als er iemand geen grep heeft?), je kan die dingen ook gewoon in Python doen.
import commands
def getZoneInfo(string):
"""
Haal zone informatie uit de string en sla ze op in een dictionary.
@param string (str) De output van '/usr/sbin/dellLEDCtl -i'
@return (dic) Dictionary met als keys de zones en als values de informatie.
"""
zoneInfo = {} #Construeer een lege dictionary.
for line in string.splitlines(): #Splits de output op in lijnen en overloop ze een voor een
if 'Current zone' in line: #Als er 'Current zone' in de lijn staat moeten we de volgende stap ook doen
zoneInfo[int(line.strip().split(' ')[2][0])] = line.split(':')[1].strip()
#Werkt als volgt: zoneInfo[key] = value
#key is hier: int(line.strip().split(' ')[2][0])
# van binnen naar buiten:
# line.strip() neemt de lijn en haalt de spaties aan het begin en het einde weg
# line.strip().split(' ') splits de lijn op aan de hand van de spaties, je krijgt dan een lijst
# line.strip().split(' ')[2] neemt het derde element van die lijst
# line.strip().split(' ')[2][0] neemt het eerste karakter van dat element (zonder : dus)
# int(line.strip().split(' ')[2][0]) maakt van dit karakter een int (een getal) ipv een string
#value is hier: line.split(':')[1].strip()
# line.split(':') splitst de lijn op basis van het dubbelpunt
# line.split(':')[1] neemt het tweede element van de lijst (het deel achter het dubbelpunt dus)
# line.split(':')[1].strip() haalt van dit element de spaties aan het begin en het einde weg
return zoneInfo
# retourneert de dictionary: die ziet er zo uit (waarden kunnen verschillen uiteraard)
# {1 : 'Aquamarine',
# 2 : 'Off',
# 3 : 'Aquamarine',
# 4 : 'Ruby'}
dellLedOutput = commands.getoutput('/usr/sbin/dellLEDCtl -i') #Voert het commando uit en slaat de output op
zoneDic = getZoneInfo(dellLedOutput) #Converteert deze output naar een dictionary (zie boven)
print "Fans are %s" % zoneDic[1] #Print de waarde voor Fans (zone 1), zoneDic[1] is de value van key 1
print "Speakers are %s" % zoneDic[2] #Analoog
print "Backpanel is %s" % zoneDic[3] #Analoog
Ik heb er wat uitleg bijgeschreven, zonder werkt het ook uiteraard.