【发布时间】:2018-04-13 02:19:17
【问题描述】:
我正在运行 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 文件。我该怎么办?
【问题讨论】:
-
你的代码比性能问题更大——如果你没有严格控制你的文件名,它也可能被用于安全漏洞(提供一个具体的例子,尝试上传使用
touch '$(rm -rf ~).csv'创建的文件不会顺利)。使用subprocess.Popen或不带shell=True的派生类要安全得多,将命令行的每一段作为单独的列表元素传递。