Расширение *
glob является частью оболочки, но по умолчанию subprocess
выполняет not отправку ваших команд через оболочку, поэтому выполняется команда (первый аргумент, ls
) , тогда в качестве аргумента используется литерал *
.
Это хорошо, см. блок предупреждения в разделе «Часто используемые аргументы» , подпроцессов docs , Он главным образом обсуждает последствия для безопасности, но также помогает избежать ошибок глупого программирования (так как нет никаких волшебных символов оболочки, о которых нужно беспокоиться)
Моя основная жалоба с shell=True
заключается в том, что обычно это лучший способ перейдите к проблеме - в вашем примере вы должны использовать модуль glob
:
import glob
files = glob.glob("*.bc")
print files # ['file1.bc', 'file2.bc']
Это будет быстрее (без накладных расходов на запуск), более надежным и перекрестным платформа (не зависит от платформы, имеющей команду ls
)