Передать вывод gsutil в файл
Привет Stackru,
Я работаю над небольшим проектом под Windows, который должен прочитать вывод функции копирования GSUTIL. Проблема в том, что вывод функции копирования не работает через стандартный вывод. Кроме того, поведение GSUTIL является непоследовательным: вывод по трубопроводу не работает с функцией копирования, но использование функции списка работает.
Когда я использую следующую команду в моей командной строке, выходные данные отображаются в командной строке, но не перенаправляются в текстовый файл. Эта команда не работает правильно:
C:\gsutil> python gsutil cp "file://C:/test_files/*" gs://gs_teststore/ > gsutil_cp.txt
С другой стороны, когда я использую функцию списка (ls
) вывод работает через стандартный вывод и работает на что я надеялся:
C:\gsutil> python gsutil ls gs://gs_teststore/ > gsutil_ls.txt
Есть ли способ захватить вывод из функции копирования GSUTIL?
2 ответа
Вы можете использовать опцию -L для генерации файла манифеста всех скопированных файлов. Из документации:
-L <файл> Выводит файл журнала манифеста с подробной информацией о каждом элементе, который был скопирован. Этот манифест содержит следующую информацию для каждого элемента:
- Исходный путь.
- Путь назначения.
- Исходный размер.
- Передано байтов.
- MD5 хеш
- Передача даты и времени по UTC началась в формате ISO 8601.
- Передача даты и времени по UTC выполнена в формате ISO 8601.
- Идентификатор загрузки, если была выполнена возобновляемая загрузка.
- Окончательный результат попытки загрузки, успех или неудача.
- Сведения о сбое, если таковые имеются.
Конкретный пример:
$ echo "hey" | gsutil cp -L manifest.txt - gs://mybucket/hey.txt
Copying from <STDIN> [Content-Type=application/octet-stream]...
$ cat manifest.txt
Source,Destination,Start,End,Md5,UploadId,Source Size,Bytes Transferred,Result,Description
file://-,gs://mybucket/hey.txt,2013-05-29T21:29:31.847715Z,2013-05-29T21:29:32.115624Z,081ecc5e6dd6ba0d150fc4bc0e62ec50,,,0,OK,
Ответ Джеффа об использовании gsutil cp -L - правильное решение для того, что вы пытаетесь сделать.
Просто добавим некоторые подробности о том, почему вы не смогли захватить вывод gsutil cp так, как вы ожидали: gsutil выводит сообщения о состоянии в stderr и выводит в stdout только тогда, когда рассматриваемый вывод является целью команды, которую вы используете. Бег. Таким образом, например, gsutil ls выводит в stdout, потому что этот вывод является целью команды, в то время как сообщения индикатора прогресса для команды gsutil cp действительно имеют статус основной цели (которая копирует данные), так что вывод идет в stderr.
Майк Шварц, команда Google Cloud Storage