Maison > développement back-end > Tutoriel Python > Comment transmettre correctement des variables à « subprocess.Popen() » sans exécution de Shell ?

Comment transmettre correctement des variables à « subprocess.Popen() » sans exécution de Shell ?

Barbara Streisand
Libérer: 2024-11-28 06:41:10
original
404 Les gens l'ont consulté

How to Properly Pass Variables to `subprocess.Popen()` without Shell Execution?

Problèmes de transmission de variables avec Subprocess.Popen()

Lors de la tentative de transmission d'arguments stockés dans des variables à subprocess.Popen(), certains utilisateurs éprouvent des difficultés. C'est particulièrement le cas lorsqu'il s'agit d'arguments tels que les suivants :

servers[server]['address']
servers[server]['port']
servers[server]['pass']
Copier après la connexion

L'application de ces variables directement à la commande Popen() comme indiqué ci-dessous peut entraîner des erreurs :

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

Solution : désactiver l'exécution du shell

Pour résoudre ce problème, supprimez le Argument shell=True de l'appel Popen(). Cela empêchera les arguments d'être traités spécialement par le shell, ce qui leur permettra d'être transmis sous forme de chaînes.

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

Notez que l'utilisation de shell=True pour les commandes prenant en compte les entrées de l'utilisateur présente des éléments de sécurité. risques. Envisagez toujours des méthodes alternatives pour protéger les entrées des utilisateurs contre les 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