Если вы не укажете shell=True
(и в первом приближении вы никогда не должны указывать shell=True
), аргументы, которые вы предоставляете, передаются как есть, без расширений оболочки, разделения слов и разделения строк.Таким образом, имя файла, которое вы передаете в качестве аргумента, точно /home/fricadelle/Artist - Album (2008)/*.flac
, что не является именем какого-либо файла.(Вот почему вам не нужно добавлять обратную косую черту перед пробелами и скобками. Если вы указали shell=True
- и я повторяю, вам действительно следует избегать этого - тогда вам нужно будет включить обратную косую черту, чтобы оболочка неразделите имя на несколько разных слов.)
Когда вы набираете
flac_files = "/home/fricadelle/Artist - Album (2008)/*.flac
без кавычек в оболочке, оболочка попытается расширить ее до списка всех файлов, имена которых соответствуют шаблону, и затем передастэтот список в качестве отдельных аргументов.Поскольку subprocess.run
не делает этого, вам придется делать это самостоятельно, что вы обычно делаете с glob.glob
.Например,
from subprocess import run
from glob import glob
flac_files = "/home/fricadelle/Artist - Album (2008)/*.flac"
run(['metaflac', '--add-replay-gain'] + glob(flac_files))
Примечание: в отличие от оболочки, glob.glob
вернет пустой список, если шаблон не соответствует ни одному файлу.Вы действительно должны проверить эту ошибку, а не вызывать metaflac
без параметров имени файла.