Passer des variables à subprocess.Popen : pourquoi cela ne fonctionne pas avec les arguments dans les listes
Lors de l'utilisation de subprocess.Popen pour appeler un autre Python script, vous pouvez rencontrer des problèmes lors de la transmission des arguments stockés dans les variables. Cela peut se produire lorsque vous tentez d'exécuter une commande comme la suivante :
1 2 3 4 5 |
|
Le problème :
Le problème survient en raison de l'utilisation de shell=True. Lorsque cet indicateur est activé, les arguments passés à Popen() sont traités différemment sur les systèmes Unix. Le shell interprète les arguments comme une seule chaîne de commande, ce qui peut entraîner un comportement inattendu.
La solution :
Pour résoudre ce problème, abandonnez l'utilisation de shell=True. Au lieu de cela, créez directement une liste d’arguments et transmettez-la à Popen(). Voici un exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
En supprimant shell=True et en construisant la liste d'arguments manuellement, vous vous assurez que les variables sont correctement transmises au script appelé.
Attention de sécurité :
Il est important de noter que passer shell=True pour les commandes impliquant une entrée externe peut présenter un risque de sécurité, comme mentionné dans le documentation des sous-processus. Si vous gérez les entrées fournies par l'utilisateur dans votre script, il est fortement recommandé d'éviter d'utiliser shell=True pour éviter 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!