Élargir le *
glob fait partie du shell, mais par défaut subprocess
fait no envoyer vos commandes via un shell, donc la commande (premier argument, ls
) est exécuté, alors un littéral *
est utilisé comme argument.
C'est une bonne chose. le bloc d'avertissement dans la section "Arguments fréquemment utilisés". de la documentation sur les sous-processus. Il traite principalement des implications en matière de sécurité, mais peut également aider à éviter les erreurs de programmation stupides (puisqu'il n'y a pas de caractères magiques de l'interpréteur de commandes à prendre en compte).
Mon principal reproche à l'égard de shell=True
c'est qu'il implique généralement qu'il y a une meilleure façon de résoudre le problème - dans votre exemple, vous devriez utiliser el glob
module :
import glob
files = glob.glob("*.bc")
print files # ['file1.bc', 'file2.bc']
Cette méthode sera plus rapide (pas de frais de démarrage de processus), plus fiable et multiplateforme (elle ne dépend pas de la présence d'une fonction ls
commande)
0 votes
Liés : Le caractère générique ne fonctionne pas dans l'appel de sous-processus avec shlex