Heim > Backend-Entwicklung > Python-Tutorial > Wie entgeht man Befehlsargumenten in Pythons „os.system()'-Aufrufen richtig?

Wie entgeht man Befehlsargumenten in Pythons „os.system()'-Aufrufen richtig?

Mary-Kate Olsen
Freigeben: 2024-10-29 05:48:02
Original
879 Leute haben es durchsucht

How to Properly Escape Command Arguments in Python's `os.system()` Calls?

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>
Nach dem Login kopieren

, 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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage