Maison >développement back-end >Tutoriel Python >Quand dois-je utiliser « shell=True » avec le module « subprocess » ?

Quand dois-je utiliser « shell=True » avec le module « subprocess » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-20 19:22:10951parcourir

When Should I Use `shell=True` with the `subprocess` Module?

Utilisation spécifique de 'shell=True' dans le sous-processus

Lors de l'utilisation du module de sous-processus, l'argument 'shell=True' sert un objectif spécifique but. Bien que les deux extraits de code suivants exécutent le même processus, leur approche diffère :

callProcess = subprocess.Popen(['ls', '-l'], shell=True)
callProcess = subprocess.Popen(['ls', '-l']) # without shell

Quand utiliser 'shell=True'

Invoquer 'shell= True' implique que la commande sera exécutée via un interpréteur shell, permettant l'expansion des variables d'environnement et des fichiers globs. Cependant, cette approche comporte des risques potentiels :

  • Invocation d'un programme inconnu : La variable d'environnement SHELL dicte quel binaire est invoqué en tant que shell, introduisant un comportement spécifique à la plate-forme.

Approche privilégiée

Généralement, il est conseillé d'éviter d'utiliser 'shell=Vrai'. Voici quelques raisons :

  • Vulnérabilités de sécurité : Les attaques ILS (input line splitting) peuvent exploiter les invocations basées sur le shell en manipulant les variables d'environnement.
  • Dépendance de la plate-forme : Le comportement du shell varie selon les plates-formes, ce qui rend difficile la garantie d'une cohérence résultats.

Résumé

Sauf si vous avez un besoin spécifique d'expansion du shell, il est recommandé de définir 'shell=False' pour les invocations de sous-processus. Cela garantit que le processus est exécuté directement sans recourir à un interprète ni introduire de risques inutiles.

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!

Déclaration:
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