AW: [Python-de] Aus r'\012' einen Zeilenumbruch ohne if erzeugen

Martin Möllenbeck Martin.Moellenbeck at t-online.de
Mon Feb 10 21:17:36 EST 2003


Hallo Georg,

das war genau der Tipp den ich brauchte. ;-))

Ich danke Dir und wuensche noch einen schoenen Abend.

Gruss
	Martin

-----Ursprüngliche Nachricht-----
Von: python-de-admin at python.net [mailto:python-de-admin at python.net] Im
Auftrag von Georg Mischler
Gesendet: Montag, 10. Februar 2003 21:04
An: python-de at python.net
Betreff: Re: [Python-de] Aus r'\012' einen Zeilenumbruch ohne if
erzeugen


Martin Möllenbeck wrote:

> Hallo Georg,
>
> in der INI-Datei sollte unter dem Schluessel eine <newline>
gespeichert
> werden.
>
> Auszug aus der INI-Datei:
> <snip>
> lineseparator = \012
> <snip>
>
> Wenn ich diesem Wert in der Ini-Datei speichere, bekomme ich beim
> Auslesen den Wert
> "r'\012'". Jetzt moechte ich aus diesem Text das 'eigentliche' Newline
> bekommen.


Ah, jetzt verstehe ich...

Ein binaeres <newline> ist als Wert in einer solchen Datei nicht
moeglich, weil das gleiche Zeichen ja die einzelnen Eintraege
voneinander trennt. Du musst also tatsaechlich die explizite
Zeichenfolge '\012' da reinschreiben.
So weit, so gut.

Mir ist allerdings keine eingebaute Funktion bekannt, welche
diese Form in die jeweilige binaere Representation umformt.
Normalerweise wird sie ja nur als "literal" im Code verwendet.
Damit kriegen wir aber auch gleich wieder eine Hintertuer. Wir
bauen den String einfach in ein Stueck Code ein, und fuehren
diesen direkt aus:

def decode_literal(s):
	statement = compile('value = "%s"' % s, '', 'single')
	exec statement
	return value

Das ist ein ziemlich fortgeschrittenes Voodoo-Ritual, aber es
funktioniert erst mal... Wenn du dabei sicherheitstechnische
Bedenken hast (zurecht!), dann solltest du vorher noch dafuer
sorgen, dass s keine Klammern, Semikolons oder echte <newline>s
etc. enthaelt. Diese wuerden es naemlich moeglich machen, deine
Funktion mittels einer untergeschobenen Datei beliebigen Code
ausfuehren zu lassen. Das waere dann das Python-Aequivalent
der beruehmten Buffer-Overflows in C. Sicher bist du z.B. dann,
wenn du nur einen fuehrenden Backslash und nachfolgende Zahlen
akzeptierst, was fuer deinen Zweck ja reichen sollte.


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/


_______________________________________________
Python-de maillist  -  Python-de at starship.python.net
http://starship.python.net/mailman/listinfo/python-de





More information about the Python-de mailing list