Heim > Artikel > Backend-Entwicklung > Wie entgeht man Befehlsargumenten in Pythons „os.system()'-Aufrufen richtig?
Escape-Befehlsargumente in os.system()-Aufrufen
Beim Arbeiten mit os.system() in Python ist auf die ordnungsgemäße Argumentbehandlung zu achten entscheidend. Dateien und andere Parameter erfordern häufig ein Escapezeichen, um eine Beeinträchtigung der Shell-Befehle zu verhindern. Hier ist eine umfassende Anleitung, um Argumente für verschiedene Betriebssysteme und Shells, insbesondere Bash, effektiv zu umgehen:
Anführungszeichen verwenden
Die einfachste Lösung besteht darin, Argumente in Anführungszeichen zu setzen. Einfache Anführungszeichen (') verhindern die Shell-Erweiterung, während doppelte Anführungszeichen (") die Variablenersetzung ermöglichen, aber die Variablenerweiterung innerhalb der in Anführungszeichen gesetzten Zeichenfolge unterdrücken. Dieser Ansatz wird auf verschiedenen Plattformen und Shells, einschließlich bash:
<code class="python">os.system("cat '%s' | grep something | sort > '%s'" % (in_filename, out_filename))</code>
, weitgehend unterstützt Verwenden des Shlex-Moduls
Python stellt das Shlex-Modul bereit, das speziell für diesen Zweck entwickelt wurde. Seine quote()-Funktion maskiert Zeichenfolgen ordnungsgemäß für die Verwendung in POSIX-Shells, einschließlich Bash:
<code class="python">import shlex escaped_in_filename = shlex.quote(in_filename) escaped_out_filename = shlex.quote(out_filename) os.system("cat {} | grep something | sort > {}".format( escaped_in_filename, escaped_out_filename))</code>
Pipes-Modul verwenden (Veraltungswarnung!)
Für die Python-Versionen 2.x und 3.x bis 3.10 kann alternativpipes.quote aus dem veralteten Pipes-Modul verwendet werden zu shlex.quote. Beachten Sie, dass Pipes ab Python 3.11 zum Entfernen markiert sind:
<code class="python">from pipes import quote escaped_in_filename = quote(in_filename) escaped_out_filename = quote(out_filename) os.system("cat {} | grep something | sort > {}".format( escaped_in_filename, escaped_out_filename))</code>
Als allgemeine Regel sollten benutzergenerierte Eingaben aus Sicherheitsgründen nicht direkt in Systemaufrufe eingefügt werden ordnungsgemäße Validierung und Desinfektion.
Das obige ist der detaillierte Inhalt vonWie entgeht man Befehlsargumenten in Pythons „os.system()'-Aufrufen richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!