2013-08-15 14 views
6

Wie kann ich die Ausgabe von os.urandom(n) im Terminal drucken?Drucken Python os.urandom Ausgabe am Terminal

Ich versuche, ein SECRET_KEY mit fabfile zu generieren und wird die 24 Bytes ausgeben.

Beispiel, wie ich beiden Varianten in der Shell Python implementieren:

>>> import os 
>>> out = os.urandom(24) 
>>> out 
'oS\xf8\xf4\xe2\xc8\xda\xe3\x7f\xc75*\x83\xb1\x06\x8c\x85\xa4\xa7piE\xd6I' 
>>> print out 
oS�������5*������piE�I 

Antwort

7

Wenn das, was Sie wollen, hex-codierte Zeichenfolge ist, verwendet binascii.a2b_hex (oder hexlify):

>>> out = 'oS\xf8\xf4\xe2\xc8\xda\xe3\x7f\xc75*\x83\xb1\x06\x8c\x85\xa4\xa7piE\xd6I' 
>>> import binascii 
>>> print binascii.hexlify(out) 
6f53f8f4e2c8dae37fc7352a83b1068c85a4a7706945d649 
+0

Ist diese hexadezimale Zeichenfolge gleich der Byteversion? Um es als Screet Key in einer Webapp zu verwenden? – danbruegge

+0

@haengebruegge, Nein, sie sind nicht gleich (out! = Binascii.hexlify (out) '). Ich weiß nicht, was "Webapp" bedeutet. – falsetru

+0

Eine Website zum Beispiel mit Django oder Kolben. Sie brauchen beide einen geheimen Schlüssel. https://docs.djangoproject.com/de/dev/ref/settings/#secret-key oder http://flask.pooco.org/docs/api/#flask.Flask.secret_key – danbruegge

1

Um gerade gebaut verwenden -ins, Sie können den ganzzahligen Wert mit ord abrufen und diesen dann wieder in eine hexadezimale Zahl umwandeln:

list_of_hex = [str(hex(ord(z)))[2:] for z in out] 
print " ".join(list_of_hex) 

Wenn Sie nur die Hex-Liste wollen, dann sind die str() und [2:] unnötige

Der Ausgang dieses und die hexify() Version beide Typ str und sollten für die Web-App funktionieren.

+1

Die 'str()' ist völlig unnötig - die 'hex()' Funktion liefert bereits eine Str ... – glglgl