OS Module: richtig und sicher nutzen
Kategorie:
Veröffentlicht: 15.07.2019
Dein Netzwerk ist offline, deshalb laden wir die gesamte Seite aus dem Cache. Beachte: die Inhalte könnten veraltet sein! Für aktuelle Inhalte aktiviere bitte dein Internet.
Hallo liebe Nutzer,
da wir als Coding-Plattform und Webentwickler ausschließlich auf aktuelle Technologien setzen, unterstützen wir keine veralteten Internetbrowser. Bitte schau dir doch ein paar der tollen Alternativen an, bestimmt findest du hier einen für dich passenden modernen Browser!

Benachrichtigungen

Bleib immer mit aktuellen Informationen auf dem Laufenden, dein Browser informiert dich über neue Artikel und wichtige Hinweise von uns!

Wofür kann ich das OS Module in Python nutzen?

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]

Eine kurze Einführung ins OS Module

Das OS Module in Python gibt dir Zugriff auf einige Funktionen des Betriebssystems (Operatingsystem). Dieses Python Module ist standardmäßig in Python implementiert. Das heißt, es muss nicht nachträglich installiert werden (bspw. mit pip).

Um mit Verzeichnissen/Dateien/Ordnern zu arbeiten, ist das OS Module eine ausgezeichnete Wahl. Es eignet sich hervorragend, um zu selektieren, umzubenennen oder zu löschen.

import os

os.system("echo Test")
# Output in Terminal: Test

item = os.getcwd() 
# Return Example: '/Users/felix/Documents/Coding/Python/textalgo'

os.listdir(item)
# Return Example: ['result.json', 'match.json', 'word.txt', '.git', 'algo.py', '.idea']

Kommen wir zu meiner Lieblingsfunktion des OS Modules:
Mit dem os.system() Befehl sind Systembefehle zur Ausführung von Automatiesierungen spielend leicht. Um den aktuellen working path festzustellen, kann ich dir den Befehl getcwd() empfehlen. Dieser ist sicherlich eine große Hilfe, um Dateien korrekt abzulegen.

Zu beachten ist, dass os.system() keinen Output des Befehls zurückgibt, sondern 0 bei Erfolg.

Als Alternative lässt sich hierfür das subprocess Module nutzen, um den Output der Console zu scrabben und zu returnen.

Siehe Beispiel unten

Um alle Dateien/Ordner in einem Verzeichnis zu erhalten, kann ich euch os.listdir(path=".") empfehlen. In unserem Beispiel setzen wir das aktuelle working directionary mittels os.getcwd() ein.

import subprocess
x = subprocess.check_output(['date'])

print(x)
# Output: b'Mon Jul 15 19:45:28 CEST 2019\n'

Wofür eignet sich das OS Module nicht?

Es gibt eine Funktion/Methode, die im OS Module aufgeführt ist, aber keine hohe Genauigkeit hat, weshalb ihre Nutzung nicht sinnvoll ist. Bei dieser Funktion handelt es sich um os.name. Auf den ersten Blick scheint man bei os.name Windows 10 oder zumindest Windows zu erhalten. Doch tatsächlich täuscht dieser Eindruck: Die Funktion gibt unter Windows, beispielsweise Windows 10 oder Vista, unter anderem “nt” zurück. Natürlich kann man darüber keine Differenzierung stattfinden lassen.

Dafür gibt es zwei deutlich bessere Methoden:

import platform

platform.system()
# Return: Darwin 
# Darwin steht für Mac

platform.relase()
# Return: 18.2.0 
# Aktuelle Version von MacOS auf meinem MacBook

import sys

sys.platform
# Return: darwin
# Allerdings sehr ähnlich zum platform.system() Befehl

Das OS Module ist ungeeignet, um die Betriebssystem Version oder den Betriebssystemnamen ordentlich zu benennen. Für einen groben Check eignet sich das Sys Module besser, für detaillierte Informationen empfiehlt sich das Platform Module.

Vorsicht bei Automatisierung

Leider geben manche Funktionen (wie os.mkdir/rename/rmdir) keine Boolean für Erfolg oder Nichterfolg zurück, weshalb man, zur Kontrolle der erfolgreichen Durchführungen aller Änderungen, eine zusätzliche Sicherheitsvalidierung einbauen sollte.

os.mkdir("src")
# Return: None

os.rename("src","oldSrc")
# Return: None

os.rmdir("oldSrc")
# Return: None

An den obenstehenden Code-Beispielen können wir dieses Verhalten sehr gut beobachten: Wir haben keine Gewissheit, dass unsere Funktion erfolgreich ausgeführt worden ist. Daher ist es sinnvoll, eine zusätzliche Sicherheitsvalidierung auszuführen. Im nachfolgenden Text erfahrt ihr, wie das aussehen kann.

Wie könnte eine Sicherheitsvalidierung aussehen?

In unserem Beispiel nutzen wir os.listdir(), um im Nachhinein einfach die Änderungen zu überprüfen. So können wir sichergehen, dass die Funktion os.mkdir(“Example”) erfolgreich ausgeführt worden ist.

import os

def createDir(name):
    # Funktion zum Erstellen des Verzeichnis
    os.mkdir(name)
    # os.listdir() holt alle Dateien und Verzeichnisse aus dem aktuellen Arbeitsverzeichnis. Es wird geprüft, ob das neue Verzeichnis existiert.

    return name in os.listdir()
    
# Funktionsaufruf
if createDir("Example"):
  print("Verzeichnis wurde erfolgreich angelegt.")
else:
  print("Das Verzeichnis wurde nicht erstellt")
  
# Output "Verzeichnis wurde erfolgreich angelegt."

Der in Operator ist ein Geschenk Gottes, Spaß bei Seite durch den in Operator können einfache Schöne Abfragen geschrieben werden.

Wenn der Return-Wert ein Array ist, wird geprüft, ob "x" in Array als Value vorhanden ist. Bei einem String wird geprüft, ob ein Teil des Strings "x" entspricht; in diesem Fall wird True zurückgegeben, andernfalls False.

Hinterlass mir doch gerne ein Feedback, falls du den Artikel gut fandest oder aber auch meinst, ich sollte inhaltlich etwas ergänzen. Schreib mir gerne einen Kommentar!

Weiterführende Informationen findet ihr in der Dokumentation von Python:

Home Menü Suche
X