Pythonprog nur ausführbar machen, wenn Bedingung erfüllt?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Pythonprog nur ausführbar machen, wenn Bedingung erfüllt?

Beitragvon mocca » Mittwoch 4. März 2009, 16:49

Hi,

Ich hab ein Python Skript und ich würde ganz gerne dafür sorgen, dass es nur dann ausführbar ist, wenn bestimmte Dateien vorhanden sind.

Sprich ich bräuchte einen Befehl, den ich als rahmen um das komplette skript setzen kann, sodass nichts getan wird, wenn die Dateien nicht vorhenden sind.

ich dachte es wäre ganz einfach mit einem

Code: Alles auswählen

if os.access('/usr/lib/kontrollatei.py', F_OK):

möglich. aber das scheint falsch zu sein.

es sollte auch möglichst eine prüfabfrage sein, die ich direkt hinter die ganzen "import" und "from" einträge hängen kann und somit einfach vor jeglicher sonstiger ausführung ist.

sorry, bin sehr unerfahren in python :(

würd mich über hilfestellung freuen :)


p.s.: ideal wäre ein befehl, bei dem ich beliebig viele dateien vorher auf existenz prüfen lassen kann.


EDIT: hatte das "os." vor "F_OK" vergessen, sorry.

aber gibt es ein zeichen, mit dem ich definieren kann, dass er "ab hier" diese if schleife anwendet und dann definieren, wo er aufhören soll? denn sonst kanns ja sein, dass er mittendrin aufhört, sobald er das nächste else findet.
Zuletzt geändert von mocca am Mittwoch 4. März 2009, 17:03, insgesamt 1-mal geändert.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 4. März 2009, 17:03

Moin,

os.path.exists suchst du wahrscheinlich. Könntest dann mit folgendem auch prüfen, ob es alle Dateien gibt:

Code: Alles auswählen

all(map(os.path.exists, ['/etc/passwd', '/etc/groups']))

Gruß,
Manuel
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 17:05

sind einzelne dateien an ganz verschiedenen orten. möchte nicht einen pfad überprüfen.

oder macht das dein code?

und müsste ich dann aber noch ne if schleife davor hängen?

hab den ersten grad nochmal editiert, als du wohl schon geantwortet hattest :)

wofür genau ist dein all(map())
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 4. März 2009, 17:15

Moin,

da hilft Doku lesen :wink: :
[mod]os.path[/mod]
[mod]functions[/mod]

/etc/passwd und /etc/groups sind Dateien.

Gruß,
Manuel
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 17:19

ich hab jetzt zum test mal die zeile geschrieben (in einer zeile, um indent fehler zu vermeiden :oops: ):

Code: Alles auswählen

if all(map(os.path.exists, ['/usr/lib/plugin.py', '/usr/lib/ni/python/pg.py'])): print "ERFOLGREICH ÜBERPÜFT" else print "Nicht vorhanden"


und ich kriege dann den fehler: "SyntaxError: Non-ASCII character '\xdc' in file ./testschleife.py on line 22, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details"


p.s.: das ist line 22.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Mittwoch 4. März 2009, 17:30

mocca hat geschrieben:und müsste ich dann aber noch ne if schleife davor hängen?

s. If-Schleife

Edit: Und? Haste Dir mal das PEP durchgelesen? Du musst ein Encoding innerhalb des Python-Scriptes setzen - speziell eines, das Umlaute unerstützt, wie etwa utf-8!
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 4. März 2009, 17:36

@mocca: Hast du getan, was die Fehlermeldung dir vorschlägt?
Benutzeravatar
bwbg
User
Beiträge: 370
Registriert: Mittwoch 23. Januar 2008, 13:35

Beitragvon bwbg » Mittwoch 4. März 2009, 17:40

In der Regel setzt man keinen ausführbaren Kode auf Modulebene. Du solltest deinen ausführbaren Teil in eine Funktion setzten und diese dann bei entsprechender Bedingung ausführen lassen.

Code: Alles auswählen

# Exemplarisch:
def main():
    # ... Programm ausführen

if __name__ == '__main__':
    main()


Für deinen Fall, in dem du noch eine zusätzliche Ausführungsbedingung abprüfen möchtest, solltest du diese in einer zusätzlichen Funktion tun.

Code: Alles auswählen

def main():
    # ... Programm ausführen

def bedingung_pruefen():
    # ... Bedingungen für die Ausführung prüfen und
    # ggf. True oder False zurück geben.
    return True

if __name__ == '__main__' and bedingung_pruefen():
    main()


---

So wie ich das jetzt mitverfolge, versuchst du Python-Dateien auf ihre Existenz zu prüfen. Warum importierst du diese nicht einfach (wenn so vorgesehen). In dem Falle, dass diese nicht existieren, wird ohnehin eine Ausnahme (ImportError) geworfen und das Programm (bei Nichtabfangen) abgebrochen.

---

Alles weitere, siehe unten :wink:

Grüße...
Heiko
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 17:42

ja, hatte auf utf-8 umgestellt aber dann kam die fehlermeldung " line 1: ´╗┐#!/usr/bin/python: not found"

@bwbg: sorry, aber ich glaub für sowas ist mein python zu schlecht :(

hätte nix dagegen, aber ich befürchte, das ich das nicht geschrieben kriege....wie man sieht tu ich mir noch schwer.


gibts ne möglichkeit dafür zu sorgen, dass nach der wandlung von .py nach .pyc der pfadname nicht lesbar ist?
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Mittwoch 4. März 2009, 17:56

Hat nichts mit Python zu tun. Vor der Shebang-Zeile (#!...) sind komische Zeichen, die da nicht hingehören. Mach die weg. Was für einen Editor benutzt du denn?

gibts ne möglichkeit dafür zu sorgen, dass nach der wandlung von .py nach .pyc der pfadname nicht lesbar ist?

Häh?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Mittwoch 4. März 2009, 18:09

Gabs da nicht mal die Macke einiger Windoof Editoren, bei utf-8 irgend welche komischen Header-Bytes avor zu setzen? Meine das hier schon mal gelesen zu haben ...
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 18:09

:D
die skripte laufen auf einer hardwareplattform (ähnlich dreambox etc.).

wenn die python skripte ausgeführt werden entstehen automatisch .pyc versionen.
nur dies sollen am ende im packet drin sein.

in .pyc kann man letztlich nichts weiter lesen, ausser mit dem hexeditor. und da eben nur dinge, die in "" stehen oder eben pfadangaben. da diese prüfvorschrit sozusagen "non-public" sein soll, würde ich gerne verhindern, dass diese pfadangaben lesbar sind.


und noch ne vielleicht leichtere anfrage: wenn ich mit os.rmdir() einen ordner löschen lassen will, gibts dafür eine art "force", damit auch nicht-leere ordner entfernt werden?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Mittwoch 4. März 2009, 18:10

mocca hat geschrieben:in .pyc kann man letztlich nichts weiter lesen, ausser mit dem hexeditor. und da eben nur dinge, die in "" stehen oder eben pfadangaben. da diese prüfvorschrit sozusagen "non-public" sein soll, würde ich gerne verhindern, dass diese pfadangaben lesbar sind.

Soll das ne Art Kopierschutz werden? Wenn ja: Vergiss es einfach!
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Mittwoch 4. März 2009, 18:13

Hyperion hat geschrieben:Soll das ne Art Kopierschutz werden? Wenn ja: Vergiss es einfach!

Im prinzip sowas in der richtung.
wieso vergessen? :(
soll nichts hochsicherheitsmässiges sein, nur eine art vorsichtsmassnahme.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Mittwoch 4. März 2009, 18:26

Weil man schon mit einem normalen Editor .pyc recht gut lesen kann. Was soll das denn für eine Vorsichtsmaßnahme sein? Dass Pfade richtig erstellt wurden? Wenn du damit Sicherstellen willst, dass das auch bei dir gekauft wurde, nimm eine passende Lizenz.

Wer ist online?

Mitglieder in diesem Forum: dark_universe