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

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: 1669
Registriert: Mittwoch 4. März 2009, 14:19

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

: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

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

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

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

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

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: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

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
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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

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
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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

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

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 ;)
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

keppla hat geschrieben: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 ;)
dafür, dass du mich nicht kennst...

das ist keine Böswilligkeit!!!!

das dient dazu, nicht das betriebssystem des gerätes abzuschiessen (es werden sicherheitshalber die ausführbaren .py entfernt), wenn jemand das programm in verbindung mit dem falschen betriebssystem benutzt und um sicherzustellen, dass es nur mit einem bestimmten betriebssystem eingesetzt wird.

in meinem ganzen code steckt nirgendwo auch nur eine zeile, die absichtlich schaden anrichtet oder programme löscht, die nicht von mir installiert wurden!

es werden nur die bei der installation kopierten dateien meines paketes teilweise entfernt!

müsste so eine anschludigung eigentlich garnicht kommentieren, aber ich will das klarstellen!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich bezweifel dass es keppla darum ging dich zu beleidigen, sondern ich denke er meint das vom rechtlichen Standpunkt aus. Ich finde die Schlussfolgerung durchaus nachvollziehbar.

Zum OSError: Das Ding heisst OSError, nicht OS.Error ;)
http://docs.python.org/library/exceptions.html hat geschrieben:exception OSError

This exception is derived from EnvironmentError. It is raised when a function returns a system-related error (not for illegal argument types or other incidental errors). The errno attribute is a numeric error code from errno, and the strerror attribute is the corresponding string, as would be printed by the C function perror. See the module errno, which contains names for the error codes defined by the underlying operating system.

For exceptions that involve a file system path (such as chdir() or unlink()), the exception instance will contain a third attribute, filename, which is the file name passed to the function.
Zu den Lizenzen: Das war schon immer so ;) Nur rückt das mit der erstarkenden OSS / CC Bewegung immer mehr ins Blickfeld der Öffentlichkeit bzw. es gibt nun halt "Standards" früher hatte da halt jeder sein proprietäres Süppchen. Nicht unter gleicher, aber das wäre wohl mit das einfachste. ShareAlike heisst, dass die neue Lizenz ähnliche Freiheiten bereitstellen muss. Wie genau das bei CC aussieht weiss ich nicht, aber vielleicht gibt es ja Kompatibilitätstabellen ähnlich der GPL.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Zum OSError: Das Ding heisst OSError, nicht OS.Error
ups, ja klar. hatte es richtitg ins skript und falsch in den post geschrieben :roll:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cofi hat geschrieben:Nur rückt das mit der erstarkenden OSS / CC Bewegung immer mehr ins Blickfeld der Öffentlichkeit bzw. es gibt nun halt "Standards" früher hatte da halt jeder sein proprietäres Süppchen. Nicht unter gleicher, aber das wäre wohl mit das einfachste. ShareAlike heisst, dass die neue Lizenz ähnliche Freiheiten bereitstellen muss. Wie genau das bei CC aussieht weiss ich nicht
Deswegen gehe ich CC soweit wie möglich aus dem Weg. Der NC-Teil heißt für mich sofort unfrei (selbst die GPL erlaubt kommerzielle Nutzung und diese finde ich sinnvoll. Schließlich ist auch viel freie Software komerziell in Benutzung und einige Leute werden gesponsort/bezahlt). Der BY-Part klingt für mich wie Advertising-Klausel die inzwischen kaum noch jemand in der BSD-Lizenz verwendet. SA klingt wie das Copyleft der GPL was wohl noch halbwegs ok ist, aber auch nicht für alle.

CC ist hauptsächlich für Medien gedacht, insofern kann ich BY und SA noch verstehen, aber NC halte ich für schädlich. Schade das Leute ganz oft genau diese Lizenz denken eben weil sie meinen jemand macht mit ihren Werken mehr Geld als sie selbst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Leonidas: Ich denke NC hat seine Berechtigung, weil so Werke unter CC gestellt werden können, bei denen das aus irgend welchen Gründen sowieso gefordert wird. Beim Urteil zu Wahlmaschinen gab's Anfang zum Beispiel so eine "Vervielfältigen ist okay, aber nur zu nicht-kommerziellen Zwecken"-Anmerkung.

Und bei Bildern kann ich mir das auch vorstellen. Runterladen als persönlicher Desktophintergrund oder Poster selber drucken ist okay, aber für "kommerzielle" Poster möchte der Künstler oder die Erben gerne Geld sehen.
Antworten