Suche meinen Fehler in Python-skript

ruiin

Well-Known Member
Hi,
hab grad ein Projekt angefangen um mir ein kleines Toolkit für meinen Freebsd-server zu schrauben, soll alles über die Kommandozeile gehen.

Python ist so das was ich benutzen will, also ist alles in python.

Mein Problem:
Wenn ich die Option "--presets" ausführen will bekomme ich nicht die Liste "default" ausgegeben sondern alles was sich in "help()" findet. Ist nen kurzes Skript deswegen kopier ich es mal hier rein.

Code:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import sys
import os
#import time

version = "0.001"

default = ["/symbols/libary-server0"]

def help():
        global version
        print """=== Toolkit ===
SYNTAX: toolkit [option] [parameter] ...

OPTION:
        -h oder --help          Zeigt diesen Infotext an.
        --presets               Zeigt alle Presets an.
        zsend [quelle?] [ziel]  Kopiert zfs-Snaps rekursiv aufs Ziel.
        backup [OPTION] ?[ziel] F?hrt Backup-Option aus und kann ein Ziel entgegen nehmen.

Backup-OPTION:
        config                  Alle FreeBSD 8.2 Systemkonfigurationen
        """
        print "Version: ", version

def presets(x = 0, ):
        global default
        if x is 0: print default

#Optionen einsammeln
try: option1 = sys.argv[1]
except: print "Keine oder fehlerhafte Anweisung!"
try: option2 = sys.argv[2]
except: pass
try: option3 = sys.argv[3]
except: pass
try: option4 = sys.argv[4]
except: pass

#Nur Option1
if option1 is "-h" or "--help": help()
elif option1 is "--presets": presets()

#Option1 und 2
elif "backup" in option1:
        pass

#Option1, 2 und 3
elif "zsend" in option1:
        pass

finde meinen eigenen Fehler nicht. Danke jetzt schon mal.
 
Hallo,

da ich vermute, dass Du gerade erst mit Python angefangen hast, erlaube mir bitte folgende Bemerkung: Dein Pyhon-Coding-Style ist echt gewöhnungsbedürftig.
"global" kannte ich bis jetzt noch gar nicht, ebenso, dass man hinter dem ":" eines try/if oder sonstwas weiteren Code schreibt.

Für das, was Du im bisherigen Code vorhast, empfehle ich Dir Dir mal "optparse" bzw. "argparse" (je nach eingesetzter Pythonversion, argparse ist der Nachfolger von optparse) anzuschauen.
 
Man hat mir Python empfohlen.
Meine Erfahrungen mit Programmieren ist relativ dürftig, ich hatte bis jetzt nicht das Problem was mir große Kenntnisse abverlangt hat. Hier hab ich meine Grundkenntnis her und auch das mit den "global" als Möglichkeit eine globale Variable in einer Funktion aufzurufen.

Werde mir mal argparse anschaun ;)
 
Hi,
hab grad ein Projekt angefangen um mir ein kleines Toolkit für meinen Freebsd-server zu schrauben, soll alles über die Kommandozeile gehen.

Python ist so das was ich benutzen will, also ist alles in python.

Mein Problem:
Wenn ich die Option "--presets" ausführen will bekomme ich nicht die Liste "default" ausgegeben sondern alles was sich in "help()" findet. Ist nen kurzes Skript deswegen kopier ich es mal hier rein.

Code:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import sys
import os
#import time

version = "0.001"

default = ["/symbols/libary-server0"]

def help():
        global version
        print """=== Toolkit ===
SYNTAX: toolkit [option] [parameter] ...

OPTION:
        -h oder --help          Zeigt diesen Infotext an.
        --presets               Zeigt alle Presets an.
        zsend [quelle?] [ziel]  Kopiert zfs-Snaps rekursiv aufs Ziel.
        backup [OPTION] ?[ziel] F?hrt Backup-Option aus und kann ein Ziel entgegen nehmen.

Backup-OPTION:
        config                  Alle FreeBSD 8.2 Systemkonfigurationen
        """
        print "Version: ", version

def presets(x = 0, ):
        global default
        if x is 0: print default

#Optionen einsammeln
try: option1 = sys.argv[1]
except: print "Keine oder fehlerhafte Anweisung!"
try: option2 = sys.argv[2]
except: pass
try: option3 = sys.argv[3]
except: pass
try: option4 = sys.argv[4]
except: pass

#Nur Option1
if option1 is "-h" or "--help": help()
elif option1 is "--presets": presets()

#Option1 und 2
elif "backup" in option1:
        pass

#Option1, 2 und 3
elif "zsend" in option1:
        pass

finde meinen eigenen Fehler nicht. Danke jetzt schon mal.

Probiers mal mit

Code:
if option1 == "-h" or "--help": help()
elif option1 == "--presets": presets()

Statt jeweils 'is'.
 
Jetzt juckts aber mir in den Fingern.

1. Sollte das Shebang auf env verweisen mit den entsp. Parameter
2. Exception Handle sollte nicht alles Abfangen, sondern nur die erforderlichen
3. Tue dir ein Gefallen und nutzte NIEMALS global
4. Der is Operator - so hat ihn noch keiner verwendet
5. Wieso ist default eine Liste?
6. Deine Vergleiche sind syn. Unsinn, wenn dann option1 in ["-h", "--help"]: help()
7. Für Aufrufargumente gibts fertige Module
8. Lies mal PEP8 und ein anständiges Tut.
 
Zurück
Oben