Lors de l'utilisation de subprocess.Popen() pour appeler un autre script Python, le passage de variables en tant qu'arguments peut rencontrer des problèmes inattendus. Voyons pourquoi cela peut se produire et comment le résoudre.
Le code fourni montre une tentative d'exécution du script mytool.py avec des arguments stockés dans des variables. Cependant, le paramètre shell=True peut gêner l'exécution.
Solution :
Pour activer le passage de variable réussi, omettre le paramètre shell=True. Dans les environnements Unix, l'activation de shell=True modifie la façon dont Popen() interprète les arguments, ce qui peut entraîner un comportement indésirable.
Voici un extrait de code modifié qui résout ce problème :
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()
Note de sécurité :
L'utilisation de shell=True pour les commandes impliquant une entrée externe constitue un risque pour la sécurité. Comme indiqué dans la documentation Python, cette pratique est déconseillée en raison de vulnérabilités potentielles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!