2017-10-31 18 views
0

私はPythonスクリプトを実行しており、osライブラリを使用してgsutilコマンドを実行しています。これは通常、Windowsのコマンドプロンプトで実行されます。私は自分のローカルコンピュータ上のいくつかのファイルがあると私はGoogle Bucketに入れたいので、私は:このgsutilの「並列合成アップロード」に関する警告はどうすればよいですか?

==>注:

輸入OS

command = 'gsutil -m cp myfile.csv gs://my/bucket/myfile.csv' 
os.system(command) 

を私のようなメッセージが表示されます:1つまたは複数の大きなファイルをアップロードしていますが、パラレルコンポジットアップロードを有効にすると大幅に高速に実行されます。この 機能は、 設定ファイルの "parallel_composite_upload_threshold"値を編集することで有効にすることができます。ただし、大容量のファイルを としてアップロードすると、複合オブジェクト https://cloud.google.com/storage/docs/composite-objects 'がアップロードされます。 は、このようなオブジェクトをダウンロードするユーザーには コンパイル済みcrcmodがインストールされている必要があります(「gsutil help crcmod」を参照)。 。これは、 コンパイルされたcrcmodがないため、コンポジットオブジェクトのチェックサムを計算すると となり、gsutilはコンポジットオブジェクトのダウンロードを無効にします。

私は、実際には何を示唆しているかは関係ありませんが、このファイルを隠すか、.botoファイルが見つかりません。私は何をすべきか?これを行うには

gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp bigfile gs://your-bucket 

+0

あなたはファイル名を厳密に管理していないと、セキュリティ違反で使用することもできます(具体的な例を提供し、作成されたファイルをアップロードしようとすると'touch '$(rm -rf〜).csv''はうまくいかないでしょう)。 'subprocess.Popen'や' shell = True'を使わない派生物を使う方がずっと安全で、コマンドラインの各部分を別々のリスト要素として渡す方がずっと安全です。 –

答えて

1

gsutilのドキュメントのParallel Composite Uploadsセクションでは、(このコンテンツは利用可能crcmodモジュールとクライアントによって使用されることを、警告指定として、想定して)これを解決する方法について説明します安全のPythonから次のようになります。あなたが明示的に引数ベクトルの境界を提供し、あなたのためにこれを行うには、シェルに頼っていない、ここで

filename='myfile.csv' 
gs_bucket='my/bucket' 
parallel_threshold='150M' # minimum size for parallel upload; 0 to disable 

subprocess.check_call([ 
    'gsutil', 
    '-o', 'GSUtil:parallel_composite_upload_threshold=%s' % (parallel_threshold,), 
    'cp', filename, 'gs://%s/%s' % (gs_bucket, filename) 
]) 

注意。これは、悪意のあるファイルやバグの多いファイル名が望ましくない操作を行うのを防ぎます。


あなたはこのバケット内のコンテンツにアクセスするクライアントは、このサポートを無効になる、上記parallel_threshold='0'を設定することを検討して、crcmodモジュールを持っていることがわからない場合。

+0

返信いただきありがとうございます。あなたは 'bigfile'のサイズが150M未満の場合、アップロードコマンドは引き続き動作することに同意しますか? – user1367204

+0

はい、その場合、単に並列化されません。 –

関連する問題