2013-05-29 39 views
2

問候StackOverflow,管gsutil輸出到文件

我正在研究Windows上的一個小項目,它需要讀取GSUTIL的複製功能的輸出。問題是,複製功能的輸出似乎不能通過標準輸出工作。此外,GSUTIL的行爲不一致:管道輸出不適用於複印功能,但使用列表功能是行不通的。

當我在命令提示符中使用以下命令時,輸出顯示在命令提示符中,但未重定向到文本文件。該命令不工作的權利:

C:\gsutil> python gsutil cp "file://C:/test_files/*" gs://gs_teststore/ > gsutil_cp.txt 

在otherhand當我使用列表功能(ls)輸出並通過標準輸出工作,工作在我希望:

C:\gsutil> python gsutil ls gs://gs_teststore/ > gsutil_ls.txt 

有一種捕獲GSUTIL複製功能的輸出的方法?

+2

您是否嘗試過使用2>&1到標準錯誤添加到標準輸出或2>管道標準錯誤的地方? http://support.microsoft.com/kb/110930 –

回答

8

您可以使用-L選項生成所有已複製文件的清單文件。從the documentation

-L <文件>輸出有關被複制每個項目的詳細信息的清單日誌文件。此清單包含以下每個項目的 信息:

  • 源路徑。
  • 目的地路徑。
  • 來源大小。
  • 字節轉移。
  • MD5散列。
  • UTC日期和時間傳輸是以ISO 8601格式開始的。
  • UTC日期和時間轉換已完成ISO 8601格式。
  • 上傳ID,如果執行了可恢復的上傳。
  • 嘗試上傳,成功或失敗的最終結果。
  • 失敗的細節,如果有的話。

一個具體的例子:

$ 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, 
+0

這比我想要的要好得多。感謝您的幫助,這個答案將完美解決我的問題。 – LamdaComplex

8

傑夫約使用gsutil CP-L的答案是你想要做什麼正確的解決方案。

只是爲了補充一些關於爲什麼你無法捕獲gsutil cp輸出的細節:gsutil將狀態消息輸出到stderr,並且當輸出有問題時輸出到stdout是目的你正在運行的命令。因此,例如,gsutil ls輸出到stdout,因爲該輸出是該命令的用途,而與此相反,gsutil cp命令的進度指示器消息確實是關於潛在用途(即複製數據)的狀態 - 所以輸出轉到stderr。

邁克·施瓦茨,谷歌雲存儲團隊

+0

謝謝你的澄清,這使得更多的意義。我現在確切知道我需要做什麼。謝謝你的幫助。 – LamdaComplex