如何使用 Python 运行 Google gsutil

Posted

技术标签:

【中文标题】如何使用 Python 运行 Google gsutil【英文标题】:How to run Google gsutil using Python 【发布时间】:2018-09-26 17:20:51 【问题描述】:

安装和配置 Google Cloud SDK gsutil 命令后,只需使用 Windows cmd 输入其名称和参数 (-s) 即可运行。

示例如下:

"C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\gcloud" version

但如果使用 Python 子进程运行相同的命令,则会失败。 子进程的 shell 参数设置为 True 时,ImportError 发生:

import subprocess

cmd = '"C:/Program Files (x86)/Google/Cloud SDK/google-cloud-sdk/bin/gsutil" version'

p = subprocess.Popen(cmd, shell=True)

.....

ImportError: No module named site

将子进程的 shell 参数设置为 False,然后出现 WindowsError: [Error 2] The system cannot find the file specified

p = subprocess.Popen(cmd, shell=False)

有没有办法使用 Python 在 Windows 上运行 gsutil

【问题讨论】:

如果你还想使用命令行,那么你必须指定文件的全名,即gsutil.cmd 【参考方案1】:

请注意,与 Google Cloud Storage 交互的正确且正式的方式是使用 Google Cloud Client Library for Python 并且不通过subprocess.Popen 运行gsutil 命令。 如果您不只是设置一些测试,我建议您从一开始就遵循这种方式,如果没有任何技术限制使这种方式不可行。

您可以在以下链接中查看相关的Overview 和Documentation。 以下是从文档中获取的一个小示例:

from google.cloud import storage

client = storage.Client()
bucket = client.get_bucket('<your-bucket-name>')
blob = bucket.blob('my-test-file.txt')
blob.upload_from_string('this is test content!')

您可以找到更多示例 here 使用 google-cloud-python 与 Datastore 和 Cloud Storage 来管理费用。

【讨论】:

据我所知,python API 不允许使用-m 并行选项。所以使用subprocessgsutil 命令是有原因的。 @UricSou:您可以跨线程共享客户端实例,因为存储客户端使用requests 库。只需在multiprocessing.Pool 之后创建客户端实例。 另外,python API 与命令行的关联非常慢

以上是关于如何使用 Python 运行 Google gsutil的主要内容,如果未能解决你的问题,请参考以下文章

Google Directory API:使用服务帐户检索用户信息时出现 403

如何使用GAE收听Google表格,然后运行一组python代码?

Google Dataproc Presto:如何使用 Python 运行查询

Google Storage 或 Amazon S3 或 Google App Engine BlobStore

使用 Python“运行 Javascript”输入更新 Google 地图标记位置

如何在私有子网上从 python Google API 客户端库运行数据流