Maison > développement back-end > Tutoriel Python > Pourquoi le passage de variable échoue-t-il dans `subprocess.Popen()` et comment puis-je y remédier ?

Pourquoi le passage de variable échoue-t-il dans `subprocess.Popen()` et comment puis-je y remédier ?

Mary-Kate Olsen
Libérer: 2024-11-28 22:17:13
original
318 Les gens l'ont consulté

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

Dépannage du passage de variables dans les arguments subprocess.Popen()

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()
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal