我正在运行一个python脚本,并使用os
库执行一个gsutil
命令,该命令通常在Windows的命令提示符下执行。我在本地计算机上有一些文件,我想将其放入Google Bucket
中,因此我:
导入操作系统
command = 'gsutil -m cp myfile.csv gs://my/bucket/myfile.csv'
os.system(command)
我得到的信息是:
==>注意:您正在上载一个或多个大文件,如果启用并行复合上载,则运行速度会大大加快。这个
可以通过编辑
.boto中的“parallel_composite_upload_threshold”值
配置文件。但是,请注意,如果执行此操作,则
作为“复合对象”上传
https://cloud.google.com/storage/docs/composite-objects“哪一个
意味着任何下载此类对象的用户都需要
已安装编译的crcmod(请参阅“gsutil help crcmod”)。这是因为
在没有编译的crcmod的情况下,计算复合对象上的校验和是
如此之慢以至于gsutil禁用了复合对象的下载。
我想把这条信息隐藏起来,如果它不相关的话,我会按照它的建议去做,但是我找不到.boto文件。我该怎么办?
最佳答案
gsutil
文档的Parallel Composite Uploads部分描述了如何解决此问题(假设,正如警告所指定的,此内容将由具有crcmod
模块的客户端使用):
gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp bigfile gs://your-bucket
要从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)
])
请注意,这里显式地提供了参数向量边界,而不是依赖shell来完成此操作;这可以防止恶意或错误的文件名执行不需要的操作。
如果您不知道访问此bucket中内容的客户端将具有
crcmod
模块,请考虑设置上面的parallel_threshold='0'
,这将禁用此支持。