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()
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!