Surmonter les pièges du passage de variables dans Subprocess.Popen()
Dans de nombreux scripts, il est nécessaire d'appeler des programmes externes avec des arguments. Lorsque ces arguments sont stockés dans des variables, des problèmes peuvent survenir avec subprocess.Popen(). Bien que cela puisse paraître simple, ce processus peut être entravé par certains pièges.
L'un de ces pièges se produit lors de l'utilisation de shell=True. Cette option traite les arguments différemment sur les systèmes Unix, conduisant à un comportement inattendu. Pour relever ce défi, il est recommandé de supprimer shell=True.
Considérez le scénario suivant :
import subprocess # Populate a 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 the script without shell=True p = subprocess.Popen([sys.executable or 'python'] + args, stdout=subprocess.PIPE)
Avec cette approche, les arguments sont gérés avec précision, permettant au programme externe de recevoir les entrées prévues.
Il est important à noter que la définition de shell=True pour les commandes avec entrée externe présente un risque pour la sécurité. Comme expliqué dans la documentation du sous-processus, cette pratique peut exposer votre script à des 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!