subprocess.Popen и передача аргументов (цитирование?) - PullRequest
0 голосов
/ 05 мая 2018

Я пытался запустить процесс с Popen безуспешно. Части кода:

setCmd=['--set-tag="COMPOSER=J S Bach"', '--set-tag="ALBUM=Goldbergovske variace BWV 988"', '--set-tag="TRACKNUMBER=01"', '--set-tag="TITLE=Aria"']
pipe = subprocess.Popen(["metaflac"] + setCmd + [file],stdout=subprocess.PIPE)

Кажется, что metaflac не работает. Простой тест

pipe = subprocess.Popen(["metaflac"] + ["--version"],stdout=subprocess.PIPE)

работает хорошо, предполагая, что проблема может быть в setCmd. Точнее, я бы предположил, что цитирование почти всегда является источником неприятностей.

Как я могу исправить код?

Я также пробовал несколько вариантов, как:

args=" ".join(setCmd)

, а затем добавляя и добавляя args, чтобы я мог запустить его так:

pipe = subprocess.Popen(args,stdout=subprocess.PIPE)

, где

args='metaflac --set-tag="COMPOSER=J S Bach" --set-tag="ALBUM=Goldbergovske variace BWV 988" --set-tag="TRACKNUMBER=01" --set-tag="TITLE=Aria" filename.flac'

тоже не работает.

1 Ответ

0 голосов
/ 05 мая 2018

Вы хотели использовать setCmd вместо args в строке Popen?

pipe = subprocess.Popen(["metaflac"] + setCmd + [file],stdout=subprocess.PIPE)

Также вам может понадобиться убрать двойные кавычки в элементах setCmd; то есть.,

setCmd=['--set-tag=COMPOSER=J S Bach',
        '--set-tag=ALBUM=Goldbergovske variace BWV 988',
        '--set-tag=TRACKNUMBER=01',
        '--set-tag=TITLE=Aria']

Они важны при вводе команды в терминал, поскольку позволяют оболочке знать, как разбивать аргументы, но здесь вы уже разбили аргументы на список строк. metaflac может иметь с ними дело, а может и нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...