如何使用 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
并行选项。所以使用subprocess
和gsutil
命令是有原因的。
@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