Подпроцесс 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
команда. Примечание: в этом случае вы должны передать команду в виде списка.