Seite 1 von 1

base64.b64decode falsche Syntax??

Verfasst: Dienstag 23. Mai 2006, 19:37
von Kobra
Hallo,

warum funktioniert folgender Codeschnipsel nicht:


Code: Alles auswählen

import base64,sys;sys.stdout.write("\0"*432+base64.b64decode(sys.stdin.read()))
Bekomme immer folgende FM:

AttributeError: 'module' object has no attribute 'base64decode'
Ist da irgendwie ein Denkfehler drin, oder stimmt die Syntax nicht, denn wenn ich z.B. print 'irgend ein crypt string' .decode("base64") ausführe fun ktioniert decode wunderprächtig. Ist das Prinzip nicht ähnlich wie base64.b64decode? Sorry für die dumme Frage :oops:

Ich hoffe, ich hab das im richtigen Bereich gepostet.

Danke im Voraus

Verfasst: Dienstag 23. Mai 2006, 21:52
von murph
meine frage: was hat das semikolon darin zu suchen? vllt schreibst du das ganze innj Python-Syntax?

Code: Alles auswählen

import base64, sys
sys.stdout.write("\0"*432+base64.b64decode(sys.stdin.read()))
Warum das nichts macht, dafür bin ich aber zu n00big^^
Weiß nicht, was welche module genau bringen...

Verfasst: Dienstag 23. Mai 2006, 22:29
von Kobra
das klimper ich direkt in die shell, deshalb alles in einer Zeile, natürlich noch mit python -c voran und das ganze in Hochkomma.
Das Problem ist, das er meint, dass er das Attribut b64decode nicht kennt, aber ich kann mich schwach dran erinnern, dass das Attribut sehr wohl im python vorhanden ist. Hab mich auch nochmal in der Referenz vergewissert. Kann halt nur sein, dass irgendwo ein Fehler drin steckt, ich hab auch schon Kontakt mit dem Entwickler dieses Schnippsels aufgenommen. Wollte das aber gleichzeitig hier posten, falls irgendjemand schon vorher ne Idee hat.

Verfasst: Dienstag 23. Mai 2006, 22:54
von murph
also bei mir läuft alles, keine ahnung...tut mir leid

Verfasst: Dienstag 23. Mai 2006, 22:59
von querdenker
@Kobra:
du übergibst dem Programm über stdin (Tastatur?) einen base64-codierten string mit?

Beschreib doch bitte mal, was du genau vorhast.
mfg, querdenker

Verfasst: Mittwoch 24. Mai 2006, 08:02
von Rebecca
Also, wenn ich jetzt (Suse 10, Python 2.4.1) die von Kobra gepostete Zeile per copy and paste in meinem Python ausfuehren lasse, wartet Python schoen brav auf Tastatureingabe. Als ich es gestern abend zu Hause (Suse 9) ausprobiert habe, hatte ich auch den AttributeError: 'module' object has no attribute 'base64decode'.

Dummerweise war es gestern abend schon spaet und mir ist noch was dazwischengekommen, sodass ich der Sache nicht mehr auf den Grund gegangen bin (vielleicht war es nur was ganz Dummes?). Versuch doch mal

Code: Alles auswählen

import base64
dir(base64)
dann siehtst du ja, ob irgendwo b64decode dabei ist. Eenn die Kommandovervollstaendigung per Tabulatortaste bei dir aktiviert ist, genuegt auch schon base64.b<TAB>.

Verfasst: Mittwoch 24. Mai 2006, 08:28
von Kobra
Eben und genau das Gleich passiert mir unter Debian, Suse 10, Suse 8.2
Es scheint als wäre es nicht implementiert.

Code: Alles auswählen

dir (base64) 
gibt unteranderem decode aus, aber eben nur decode, b64decode gibt es nicht, obwohl es ja eindeutig zur Syntax von base64 laut python Referenz dazugehört.
@murph:
Wie hast du den Code ausgeführt, welches OS und python version?

Verfasst: Mittwoch 24. Mai 2006, 08:43
von murph
ich habe ihn direkt in der kommandozeile ausgeführt, allerdings auseinandergenommen, sprich den import von dem anderem getrennt.
Python: 2.4.2
OS: Ubuntu 5.10

Verfasst: Mittwoch 24. Mai 2006, 09:26
von Kobra
Vielleicht liegt es wirklich an der Python Version.
Ich check ma ne andere auf Suse 8.2 und Debian waren es glaube nur Version 2.2
Ansonsten, könnte ich dich eventuell mal bitten ne Codezeile für mich in deine shell zu klimmpern, der generiert daraus ne Datei die ich bräuchte?, anscheinend funktionierts ja bei dir.

Verfasst: Mittwoch 24. Mai 2006, 09:58
von murph
solange es nur einmal ist ;)

Verfasst: Mittwoch 24. Mai 2006, 10:03
von Kobra
Danke für deine Hilfe.
Es lag wirklich an der Version, unter Version 2.2 kennt base64 kein Attribut b64decode.
Ma schnell die Version 2.4.1 ausprobiert und bingo, es ging. 8)

Also brauch ich dich nicht mehr nötigen :D

Verfasst: Mittwoch 24. Mai 2006, 10:06
von murph
OK...

Verfasst: Donnerstag 25. Mai 2006, 07:06
von BlackJack
Man kommt auch ohne den import von `base64` aus:

Code: Alles auswählen

python -c 'import sys;sys.stdout.write("\0"*432+sys.stdin.read().decode("base64"))'