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

Beitragvon mocca » Donnerstag 5. März 2009, 16:18

also, ich habe es jetzt soweit, dass die kontrolle mehrerer dateien auf existenz funktioniert.

DANKE!!!!

nun fehlt noch der base64 teil.

das encoden und decoden ist kein problem. aber dies nun korrekt an den os.path.exist zu übergeben scheitert.

Code: Alles auswählen

encoded = base64.b64encode("'/usr/lib/nel'", altchars=None)
ku1 = base64.b64decode(encoded, altchars=None)
print ku1
encoded2 = base64.b64encode("'/usr/lib/module'", altchars=None)
ku2 = base64.b64decode(encoded2, altchars=None)
print ku2

if all(map(os.path.exists, [ku1, ku2])): print "vorhanden"


irgendwas stimmt auch hier nicht, weil jedesmal else ausgeführt wird :x

hab auch schon versucht nur einen pfad zu prüfen mit

Code: Alles auswählen

if all(map(os.path.exists, [ku1])): print "vorhanden"
und auch mit

Code: Alles auswählen

if all(map(os.path.exists, ku1)): print "vorhanden"
aber ging beides auch nicht.

ziel so nah und doch so fern.
wo isn jetzt schon wieder mein fehler? :oops:
jerch
User
Beiträge: 1622
Registriert: Mittwoch 4. März 2009, 14:19

Beitragvon jerch » Donnerstag 5. März 2009, 16:31

versuchs nochmal ohne die doppelten Stringliterale:

Code: Alles auswählen

"'/usr/lib/nel'" --> '/usr/lib/nel'
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 16:36

:D :D :D :D :D

danke schön!

ich dachte ich bräuchte die, da sonst für die pfadangabe die einfachen nicht mit encoded und decoded würden.

vielen dank.

werd mal versuchen das ganze nun fertig zu stellen und dann nach dem essen berichten :)
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 17:25

so, allerletzte frage, dann ists fertig.

in meinem else ist es so, dass wenn eine der zu löschenden dateien fehlt, der rest nicht gelöscht wird, sprich der vorgang abgebrochen wird.

wie kann ich das am einfachsten verhinden bzw. dafür sorgen, dass das ignoriert und der nächste befehl ausgeführt wird?

Code: Alles auswählen

else: shutil.rmtree(ku11); os.remove(ku9); os.remove(ku10);
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Donnerstag 5. März 2009, 18:33

mocca hat geschrieben:in meinem else ist es so, dass wenn eine der zu löschenden dateien fehlt, der rest nicht gelöscht wird, sprich der vorgang abgebrochen wird.

indem du die doku zu den dir bereits bekannten funktionen liest.

Code: Alles auswählen

help("shutil.rmtree")
gibt u.a.

rmtree(path, ignore_errors=False, onerror=None)

zurück, ignore_errors fällt da ins Auge.

edit: die semicola sind hoffentlich nur im post un nicht in deinem code?
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 19:43

das problem is das os.remove().

dort gibt es, zumindest laut help, kein ignore_errors. und wenn ich es testweise einfüge kommt entsprechend ein fehler.
sobald aber das erste os.remove() eine datei löschen soll, die es nicht gibt, bricht der ganze vorgang ab.

so sieht der code bei mir aus:

Code: Alles auswählen

if all(map(os.path.exists, [ku1, ku2, ku3, ku4, ku5, ku6, ku7, ku8])):
   print ""
   print "All clear"
   print ""
   sys.exit(10)
else:
   os.remove(ku10)
   os.remove(ku9)
   shutil.rmtree(ku11, ignore_errors=True)
   print "SystemFailure"
   sys.exit(10)



EDIT: ich sollte noch erwähnen, dass mir bewusst ist, dass ich alles mit shutils löschen lassen könnte, da shutils aber nicht zum system gehört und von mir installiert wird, würde ich gerne eine systemfunktion zum löschen der wichtigsten beiden datei nutzen. muss also ein "os" befehl sein.
BlackJack

Beitragvon BlackJack » Donnerstag 5. März 2009, 21:14

Die Namensgebung `ku1` bis `ku11` ist jetzt aber nicht ernst gemeint, oder? Namen sollten die Bedeutung des Objekts, das an sie gebunden ist widerspielgeln, und nicht den Leser verwirren.

Ein `os.remove()` bei einer Datei, die es nicht gibt, löst eine Ausnahme aus. Die musst Du entsprechend mit ``try`` und ``except`` behandeln.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 21:36

doch, ist mein ernst.
ist doch teil der absicherung.
wenn ich da hinschreibe: kontrolldatei1, kontrolldatei2, dann würde das der ganzen idee des verschlüsselns mit base64 widersprechen.

das mit try werde ich gleich mal versuchen :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Donnerstag 5. März 2009, 21:37

mocca hat geschrieben:doch, ist mein ernst.
ist doch teil der absicherung.

OMG!
wenn ich da hinschreibe: kontrolldatei1, kontrolldatei2, dann würde das der ganzen idee des verschlüsselns mit base64 widersprechen.

das mit try werde ich gleich mal versuchen :)

Wobei ich das noch nicht ganz verstanden habe: Irgendwo im Script muss das ja passieren - diesen Teil kann man doch dann einfach auskommentieren?
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Beitragvon Trundle » Donnerstag 5. März 2009, 21:50

Warum schreibst du nicht einfach eine ausführliche Readme und verschwendest deine Zeit und Energie nicht für irgendwelche komischen Maßnahmen, die den Code einfach nur unleserlich und unwartbar machen und dabei letztlich doch nichts bringen?

Edit: Typo.
Zuletzt geändert von Trundle am Donnerstag 5. März 2009, 21:55, insgesamt 1-mal geändert.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Donnerstag 5. März 2009, 21:53

Mir ist das ganze immernoch schleierhaft ... wählst du die richtige Lizenz, dann weist du jede Haftung von dir - es sei denn Böswilligkeit ist nachweisbar. Wenn das ganze nicht kommerziell sein soll versteh ich deine Anstalten schlichtweg nicht. Lass die Leute sich doch in den Fuß schiessen ... kontrollieren ist in Ordnung, aber so? Das ist doch overkill (noch dazu nutzloser).

Übrigens mit einer "anonymen" Liste statt diesen dämlichen Namen, machst du das Skript wartbarer (weil die Namen einfach nur irreführend sind) und gibst noch weniger Hinweise als momentan.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 22:06

ich kann die leute ihr box zerschiessen lassen, nehme ich an. aber eigentlich möchte ich das nicht.

davon abgesehen, dass ich mit eurer hilfe hier ne menge lerne, würd ich das einfach gerne "korrekt" machen.

das mit den bezeichnungen ist schon in ordnung so. da nur ich das ganze warte und ich weiss, wofür es steht (ist ja ne ablürzung), lasse ich die namensgebung so.

habs jettz statt mit try-except einfach nochmal über eine if abfrage gelöst. falls datei vorhanden, wird sie gelöscht.

p.s.: welche lizenz ist denn die "sicherste" für mich, um jeglichen problemen vorzubeugen?
teile des benutzten plugins stammen von einer anderen person, die die CreativeCommons by-nc-sa http://creativecommons.org/licenses/by-nc-sa/3.0/ benutzt hat.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Donnerstag 5. März 2009, 22:23

Das spricht für dich, aber so machst du dir das Leben nur schwer. Auch wenn nur du allein das Skript wartest, lass das mal ein halbes Jahr ruhen und arbeite wieder daran ... dann wirst du merken, dass das nicht gut geht ;)

Creative Commons is bei Programmen nicht allzu verbreitet (was aber bestimmt mit dessen Alter zu tun hat), sollte aber auch eine Option sein. Dir dürfte von der WTFPL(http://sam.zoy.org/wtfpl/) bis zur GPL eigentlich alle offen, wobei man da genauer wissen müsste wie du das Plugin nutzt. Wenn du das erweiterst, statt zu benutzen könnte es durchaus anders aussehen ... aber ich bin kein Anwalt ;)

Code: Alles auswählen

try:
    os.remove(...)
except OSError:
    pass
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Beitragvon mocca » Donnerstag 5. März 2009, 22:45

cofi hat geschrieben:Das spricht für dich, aber so machst du dir das Leben nur schwer. Auch wenn nur du allein das Skript wartest, lass das mal ein halbes Jahr ruhen und arbeite wieder daran ... dann wirst du merken, dass das nicht gut geht ;)

leider möglich, wobei ich da eigentlich ziemlich dauerhaft dran arbeite und im zweifel komm ich hier her und lese nach, was ich verzappft habe :D

ich bin kein informatiker/programmierer oder developer, aber ich hab halt meinen spass dran und arbeite da bei einem team etwas mit.

Creative Commons is bei Programmen nicht allzu verbreitet (was aber bestimmt mit dessen Alter zu tun hat), sollte aber auch eine Option sein. Dir dürfte von der WTFPL(http://sam.zoy.org/wtfpl/) bis zur GPL eigentlich alle offen, wobei man da genauer wissen müsste wie du das Plugin nutzt. Wenn du das erweiterst, statt zu benutzen könnte es durchaus anders aussehen ... aber ich bin kein Anwalt ;)

Ja, das mit Lizenzen heutzutage ist echt blöd.

So sachen wie jetzt die CreativeCommons ist ja auch nicht grad eindeutig. Den Namen etc. angeben wie vom autor verlangt...tja, ist wohl ansichtssache, ob man wissen muss, wie er es wollte, wenn es nicht explizit dabei steht.
Aber ich "muss" es an sich unter gleicher lizenz veröffentlichen, da das teil der lizenz ist :D

Code: Alles auswählen

try:
    os.remove(...)
except OSError:
    pass

super, danke! habs zwar jetzt durch die if-abfrage (danke für die bezeichnungsaufklärung!) gelöst, aber jetzt weiss ich, wo ich falsch lag.

das OS.Error hatte ich nicht.
ich hab erst ganz ohne except gemacht, weil ich nichts alternativ gemacht haben wollte, dann mit "except: print "nix" " und dann wollte ich beim try noch versuchen vorher was zu definieren....alles natürlich erfolglos.


ist OS.Error also ganz allgemein wenn ein fehler eines "os." zurückkommt?


ich habs schonmal gesagt, aber ich sags nochmal:

Danke für Eure hilfe!
in vielen foren heutzutage würden sich leute mit newbies und lernwilligen garnicht mehr abgeben. da kriegt man nur "google" als antwort und damit kommt man teilweise nicht weiter (weil einem am ende ein einfach OSError fehlt :D ).

ich selbst versuche auch immer newbies zu helfen bei den dingen, von denen ich viel mehr ahnung habe als von python. so wie ich es mir auch stets wünsche. dazu sind foren imho da :)

werde euch in zukunft bestimmt nochmal irgendwann nerven :D

aber nun erstmal alles beenden und noch ein bisschen an anderen baustellen arbeiten :roll:

nochmal: DANKE!
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Donnerstag 5. März 2009, 22:51

cofi hat geschrieben:Mir ist das ganze immernoch schleierhaft ... wählst du die richtige Lizenz, dann weist du jede Haftung von dir - es sei denn Böswilligkeit ist nachweisbar.


hmm, sagen wir mal, warum auch immer (bug, usereingabe) zeigt die obfuscatete "ku"-variable auf ~ oder /etc/passwd... ich würd ja bei soviel mühe, die funktion zu verbergen, auf böswilligkeit tippen ;)

Wer ist online?

Mitglieder in diesem Forum: __deets__