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

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

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

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.

Так что очевидно, что подпроцесс каким-то образом искажает команду...

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


person mickeywilko    schedule 09.03.2015    source источник


Ответы (1)


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

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

person jfs    schedule 09.03.2015