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