Heim > Backend-Entwicklung > Python-Tutorial > Wie übergebe ich Variablen ordnungsgemäß an „subprocess.Popen()' ohne Shell-Ausführung?

Wie übergebe ich Variablen ordnungsgemäß an „subprocess.Popen()' ohne Shell-Ausführung?

Barbara Streisand
Freigeben: 2024-11-28 06:41:10
Original
346 Leute haben es durchsucht

How to Properly Pass Variables to `subprocess.Popen()` without Shell Execution?

Variablenübergabeprobleme mit Subprocess.Popen()

Beim Versuch, in Variablen gespeicherte Argumente an subprocess.Popen() zu übergeben, treten bei einigen Benutzern Probleme auf Schwierigkeiten erleben. Dies ist insbesondere dann der Fall, wenn es um Argumente wie die folgenden geht:

servers[server]['address']
servers[server]['port']
servers[server]['pass']
Nach dem Login kopieren

Die direkte Anwendung dieser Variablen auf den Befehl Popen(), wie unten gezeigt, kann zu Fehlern führen:

p = subprocess.Popen(
    ["python mytool.py -a ", servers[server]['address'], "-x", servers[server]['port'], "-p", servers[server]['pass'], "some additional command"],
    shell=True,
    stdout=subprocess.PIPE
)
Nach dem Login kopieren

Lösung: Shell-Ausführung deaktivieren

Um dieses Problem zu beheben, entfernen Sie die shell=True Argument aus dem Popen()-Aufruf. Dadurch wird verhindert, dass die Argumente von der Shell speziell behandelt werden, sodass sie stattdessen als Zeichenfolgen übergeben werden können.

import sys
from subprocess import Popen, PIPE

# populate list of arguments
args = ["mytool.py"]
for opt, optname in zip("-a -x -p".split(), "address port pass".split()):
    args.extend([opt, str(servers[server][optname])])
args.extend("some additional command".split())

# run script
p = Popen([sys.executable or 'python'] + args, stdout=PIPE)
# use p.stdout here...
p.stdout.close()
p.wait()
Nach dem Login kopieren

Beachten Sie, dass die Verwendung von shell=True für Befehle, die Benutzereingaben annehmen, Sicherheit bietet Risiken. Ziehen Sie immer alternative Methoden in Betracht, um Benutzereingaben vor potenziellen Schwachstellen zu schützen.

Das obige ist der detaillierte Inhalt vonWie übergebe ich Variablen ordnungsgemäß an „subprocess.Popen()' ohne Shell-Ausführung?. 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