Auf der Suche nach gutem Stil

22/11/2007 - 20:02 von Alexander Blinne | Report spam
Hi!

Ich bin neu in dieser Gruppe und habe erst gestern angefangen mich
intensiv mit Python zu beschàftigen. Habe bei Dokumentation und Tutorial
von python.org begonnen und auch Dive into python angeschaut.
Da unter Kubuntu Gutsy die Helligkeitstasten des Notebooks nicht mehr
tun, schrieb ich ein Script um die Helligkeit per /proc zu àndern. Da
ich es gewohnt war PHP auch auf der Kommandozeile zu benutzen, schrieb
ich es in PHP. Nun habe ich ein Script für den selben Zweck in Python
geschrieben.
Es funktioniert pràchtig, meine Frage an euch:

Gibt es etwas an meinem script auszusetzen, etwas was man einfach
schöner, direkter, simpler, ordentlicher tun kann als ich es getan habe?

#!/usr/bin/env python
"""Usage: acpi.py [+-=]d"""

def readvideo(filename):
"""Reads ACPI Video Data

Returns current value and levels"""
video = open(filename, "r")
for line in video:
line = line.split(':')
name = line[0]
value = line[1]
if name == 'current':
current = int(value) #read current value
elif name == 'levels':
levels = value.strip().split() #read levels
levels = [int(level) for level in levels]
levels = list(set(levels)) #remove duplicates
levels.sort()
video.close
return current, levels

def setvideo(filename, level):
"""Sets ACPI video Brightness

echo level > /proc..."""
video = open(filename, "w")
video.write(str(level))

def main():
import sys

try:
if len(sys.argv)!=2:
raise
arg = sys.argv[1]
if arg[0]=="=":
absolute = True
number = int(arg[1:])
else:
absolute = False
number = int(arg)
except:
print __doc__
quit()

filename = "/proc/acpi/video/C08D/C163/brightness"
current,levels = readvideo(filename)

try:
brightness = levels.index(current)
except:
brightness = 8

if absolute:
brightness = number
else:
brightness += number

try:
setvideo(filename,levels[brightness])
except IOError:
print "You need root privileges!"

if __name__ == "__main__":
main()
 

Lesen sie die antworten

#1 Marc BlackJack Rintsch
22/11/2007 - 21:10 | Warnen spam
On Thu, 22 Nov 2007 20:02:04 +0100, Alexander Blinne wrote:

Gibt es etwas an meinem script auszusetzen, etwas was man einfach
schöner, direkter, simpler, ordentlicher tun kann als ich es getan habe?



Dateien sollte man explizit schliessen. In `setvideo()` fehlt das ganz
und in `readvideo()` fehlern die Klammern für den Aufruf. So wird einfach
nur die `close()`-Methode referenziert und es passiert gar nichts.

Die meisten Leute schreiben ``import``\s an den Anfang des Moduls.

``raise`` und ``except`` ohne konkrete Ausnahmen als GOTO-Ersatz zu
benutzen sieht sehr unsauber aus. ``except``\s ohne konkrete Ausnahme
behandeln *alle* Ausnahmen, zum Beispiel auch einen `NameError` wenn man
sich im ``try``-Block oder einer Funktion die von dort heraus aufgerufen
wird mal verschrieben hat. Solche Fehler möchte man im allgemeinen
*sehen*, sonst kann man teilweise lange danach suchen.

Ciao,
Marc 'BlackJack' Rintsch

Ähnliche fragen