Die Python-Funktion oct(x) wandelt eine Ganzzahl in ihren Oktal-String mit dem Präfix 0o um. Sie ist das oktal-Pendant zu bin() und hex(). Hauptanwendung im Alltag: Unix-Dateirechte (chmod 755 ist eigentlich oktal 0o755), Berechtigungs-Bitmasken und niedrige Hardware-Repräsentation aus historischen C-/Unix-Kontexten.

Einleitung

Das Oktalsystem nutzt acht Ziffern (07) und ist im Web- und App-Alltag selten — mit einer wichtigen Ausnahme: Unix-Dateirechte. chmod 644 setzt die Rechte tatsächlich auf das Bitmuster 110 100 100 (rw-r--r--) — und diese drei 3-Bit-Gruppen lassen sich als drei Oktal-Ziffern lesen.

oct() produziert immer Lowercase-Strings mit Präfix 0o. Die Inverse ist int(s, 8). Wer das Präfix nicht möchte, nutzt einen f-String mit :o.

Syntax

Python Syntax
oct(x)
Parameter
x

Eine Ganzzahl oder ein Objekt mit __index__()-Methode.

Rückgabewert

Ein String der Form "0o..." (Lowercase) bei positiven Zahlen bzw. "-0o..." bei negativen.

Beispiele

Standard-Konvertierung

Python Beispiel
print(oct(8))
print(oct(64))
print(oct(0))
print(oct(-8))
Output
0o10
0o100
0o0
-0o10

Unix-Dateirechte verständlich machen

Die häufigste Praxis-Anwendung — Rechte aus os.stat werden als Integer geliefert und sind als Oktal direkt lesbar:

Python Beispiel
import os, stat
# Beispiel: Modus eines temporären Files
info = os.stat(__file__)
mode = stat.S_IMODE(info.st_mode)
print(f"Bitmuster: {bin(mode)}")
print(f"Oktal:     {oct(mode)}")
Output
Bitmuster: 0b110100100
Oktal:     0o644

Ohne Präfix mit f-String

Wenn das 0o-Präfix stört (z. B. für die Anzeige in Tabellen), reicht der Format-Spezifizierer :o:

Python Beispiel
print(f"{511:o}")        # ohne Präfix
print(f"{511:#o}")        # mit Präfix
print(f"{8:04o}")         # auf 4 Stellen aufgefüllt
Output
777
0o777
0010

Praktische Beispiele

chmod-Konvertierung

Die klassische Frage „was bedeutet chmod 750 denn nun?" lässt sich mit oct() und bin() schnell beantworten:

Python Beispiel
# 750 oktal = rwxr-x---
mode_octal = 0o750
groups = [(mode_octal >> shift) & 0o7 for shift in (6, 3, 0)]
labels = ["Owner", "Gruppe", "Andere"]
for label, bits in zip(labels, groups):
    r = "r" if bits & 4 else "-"
    w = "w" if bits & 2 else "-"
    x = "x" if bits & 1 else "-"
    print(f"{label}: {r}{w}{x}")
Output
Owner: rwx
Gruppe: r-x
Andere: ---

Oktal-String parsen

int(s, 8) ist die Umkehrung von oct() und liefert wieder eine Ganzzahl:

Python Beispiel
value = int("755", 8)
print(value)
print(oct(value))
Output
493
0o755

Praktische Hinweise

  • Datei-Modi sind oktal: In os.chmod(pfad, 0o755) ist das 0o-Präfix wichtig — sonst wird die Zahl als dezimal interpretiert und die Rechte sind falsch.
  • Float wird abgelehnt — vorher mit int() casten.
  • Verwandte Funktionen: bin() (binär), hex() (hex), int(s, 8) (Umkehrung).
  • stat-Modul hilft beim sauberen Ausfiltern der Permissions-Bits aus st_mode.
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht