Подпроцесс python не будет хорошо работать с командами копирования / перемещения gsutil

В Python я использую подпроцесс для вызова команд gsutil copy и move, но в настоящее время я не могу выбрать несколько расширений.

Та же команда gsutil работает в терминале, но не в python:

cmd_gsutil = "sudo gsutil -m mv gs://xyz-ms-media-upload/*.{mp4,jpg} gs://xyz-ms-media-upload/temp/"
p = subprocess.Popen(cmd_gsutil, shell=True, stderr=subprocess.PIPE)
output, err = p.communicate()

Если, скажем, есть четыре типа файлов для перемещения, но корзина пуста, возвращаемая ошибка терминала gsutil:

4 files/objects could not be transferred.

В то время как ошибка, возвращаемая при запуске через подпроцесс:

1 files/objects could not be transferred.

Так ясно, что подпроцесс как-то портит команду...

Я всегда мог неэффективно повторить команду для каждого из типов файлов, но предпочел бы докопаться до сути!

1 ответ

Похоже на то, /bin/sh (оболочка по умолчанию) не поддерживает {mp4,jpg} синтаксис. Проходить executable='/bin/bash', чтобы запустить его как команду bash вместо.

Вы также можете запустить команду без оболочки, например, используя glob или же fnmatch модули, чтобы получить имена файлов для построения gsutil команда. Примечание: в этом случае вы должны передать команду в виде списка.

Другие вопросы по тегам