【问题标题】:gsutil cp in python via os.systempython中的gsutil cp通过os.system
【发布时间】:2019-01-01 17:03:30
【问题描述】:

我想将本地文件复制到谷歌云存储桶。我可以在命令行中使用gsutil cp 来做到这一点。但我想在 python 中执行此操作,因此要在 python 中运行类似的命令,我使用以下行:

os.system('gsutil cp '+ '/MY-LOCAL-FILE-NAME' +' gs://My-Bucket-Name')

它将文件发送到存储桶,但它是一个空文件!!! 我也尝试了 python 子进程但同样的问题。 我认为问题在于字符串连接。当我使用整个字符串时,它可以工作并将文件发送到存储桶,但是当我在 "subprocess" 或 "os.system" 中连接子字符串时,它只发送一个空文件,这太奇怪了,有什么想法吗???

【问题讨论】:

  • 文件与您的 python 脚本位于同一路径这一事实毫无意义。 当前工作目录意味着一切。
  • 谢谢,我其实知道。例如,当我使用简单的 os.system('cp ...') 命令时它可以工作,但是对于 os.system('gsutil cp...') 我得到上述错误,我不知道为什么使用 gsutil 它没有不行吗?
  • 您有什么理由不为此目的使用 Python 库吗? cloud.google.com/storage/docs/reference/…
  • 我同意 @ScottMcC 的观点,使用 Python 的 GCS 库会容易得多。有使用命令行的理由吗?
  • 我希望我的代码尽可能独立于平台,这就是我尽量避免使用 GCS 库的原因。实际上我发现这是因为 python/subprocess/os.system 字符串连接的问题。当我在没有任何连接(+)的情况下使用整个字符串时,它可以工作并将文件发送到存储桶,但是当我将子字符串连接在一起时,它不起作用,它只是将一个空文件发送到存储桶,任何关于原因的想法都很奇怪?谢谢

标签: python google-cloud-platform cp gsutil os.system


【解决方案1】:

您可以从 Gcloud github 获得 snippets,其中有一个是您感兴趣的:

def upload_blob(bucket_name, source_file_name, destination_blob_name):
"""Uploads a file to the bucket."""
     storage_client = storage.Client()
     bucket = storage_client.get_bucket(bucket_name)
     blob = bucket.blob(destination_blob_name)

     blob.upload_from_filename(source_file_name)

print('File {} uploaded to {}.'.format(
    source_file_name,
    destination_blob_name))

【讨论】:

  • 断开的链接已损坏。
  • 确实,sn-ps 刚刚被移动。更新了链接。发送
猜你喜欢
  • 2014-10-04
  • 2015-01-30
  • 2021-01-30
  • 2021-06-18
  • 2017-07-22
  • 1970-01-01
  • 2017-05-12
  • 2021-05-20
  • 2021-11-25
相关资源
最近更新 更多