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