2017-10-31 4 views
0

저는 파이썬 스크립트를 실행하고 os 라이브러리를 사용하여 일반적으로 Windows의 명령 프롬프트에서 실행되는 gsutil 명령을 실행합니다. 내 로컬 컴퓨터에서 일부 파일이 있고 나는 Google Bucket에 넣어 싶어 그래서 수행gsutil "병렬 복합 업로드"경고에 대해 어떻게해야합니까?

수입 OS

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

나는 같은 메시지 수 :

==> 참고 : 하나 이상의 대용량 파일을 업로드하는 중입니다. 병렬 합성 업로드를 사용하면 훨씬 빠르게 실행됩니다. 이 기능은 .boto 구성 파일의 "parallel_composite_upload_threshold"값을 편집하여 사용하도록 설정할 수 있습니다. 그러나이 작업을 수행하면 은 'composite objects 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''는 잘되지 않을 것입니다. 'shell = True'없이'subprocess.Popen' 또는 파생물을 사용하는 것이 훨씬 안전합니다. 명령 행의 각 부분을 별도의 목록 요소로 전달하십시오. –

답변

1

gsutil에 대한 문서의 Parallel Composite Uploads 섹션 (이 내용이 사용할 수있는 crcmod 모듈과 클라이언트가 사용됩니다, 경고 명시한대로, 가정)이 문제를 해결하는 방법에 대해 설명합니다 안전하게 파이썬과 같습니다 명시 적으로 인수 벡터 경계를 제공하고 당신을 위해이 작업을 수행하는 쉘에 의존하지 않는 여기

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) 
]) 

참고; 이렇게하면 악성 또는 버그가있는 파일 이름이 원하지 않는 작업을 수행하는 것을 방지 할 수 있습니다. 이 양동이에 콘텐츠에 액세스 클라이언트가 crcmod 모듈이있을 것이라는 점을 알 수없는 경우


이 지원을 비활성화 할 위 parallel_threshold='0'을 설정하는 것이 좋습니다.

+0

답장을 보내 주셔서 감사합니다. 'bigfile'의 크기가 150M보다 작 으면 업로드 명령이 계속 작동한다는 것에 동의하십니까? – user1367204

+0

예; 이 경우 단순히 병렬 처리되지 않습니다. –