Heim > Backend-Entwicklung > Python-Tutorial > Warum schlägt die Variablenübergabe in „subprocess.Popen()' fehl und wie kann ich das beheben?

Warum schlägt die Variablenübergabe in „subprocess.Popen()' fehl und wie kann ich das beheben?

Mary-Kate Olsen
Freigeben: 2024-11-28 22:17:13
Original
229 Leute haben es durchsucht

Why Does Variable Passing Fail in `subprocess.Popen()` and How Can I Fix It?

Fehlerbehebung bei der Variablenübergabe in subprocess.Popen()-Argumenten

Bei der Verwendung von subprocess.Popen() zum Aufrufen eines anderen Python-Skripts kann es bei der Übergabe von Variablen als Argumente zu unerwarteten Problemen kommen. Lassen Sie uns untersuchen, warum dies auftreten kann und wie Sie es beheben können.

Der bereitgestellte Code zeigt einen Versuch, das Skript mytool.py mit in Variablen gespeicherten Argumenten auszuführen. Allerdings kann der Parameter „shell=True“ die Ausführung behindern.

Lösung:

Um eine erfolgreiche Variablenübergabe zu ermöglichen, lassen Sie den Parameter „shell=True“ weg. In Unix-Umgebungen ändert die Aktivierung von „shell=True“ die Art und Weise, wie Popen() Argumente interpretiert, was möglicherweise zu unerwünschtem Verhalten führt.

Hier ist ein geänderter Codeausschnitt, der dieses Problem behebt:

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

Sicherheitshinweis:

Die Verwendung von „shell=True“ für Befehle mit externen Eingaben ist eine Sicherheitsmaßnahme Gefahr. Wie in der Python-Dokumentation angegeben, wird von dieser Vorgehensweise aufgrund potenzieller Schwachstellen abgeraten.

Das obige ist der detaillierte Inhalt vonWarum schlägt die Variablenübergabe in „subprocess.Popen()' fehl und wie kann ich das beheben?. 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