我正在尝试了解如何在Google云端存储上的文件夹中上传文件。 我找到了这段代码:https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/storage/cloud-client 这可以做一堆操作,比如create-bucket,delete-bucket,list,upload和download ......
但是,我无法运行代码。
我试过了:
python snippets.py [-h] scene.appspot.com list
错误:
错误:参数命令:无效选择:'scene -maker.appspot.com' (从'create-bucket','delete-bucket','get-bucket-labels'中选择, 'add-bucket-label','remove-bucket-label','list','list-with-prefix', '上传','下载','删除','元数据','make-public', 'signed-url','rename','copy')
我试过了:
python snippets.py [-h] list scene.appspot.com
python snippets.py [-h] list gs://scene.appspot.com
python snippets.py [-h] list "gs://scene.appspot.com"
python snippets.py [-h] list bucket_name
错误:
error: unrecognized arguments: scene.appspot.com
error: unrecognized arguments: gs://scene.appspot.com
我试过了:
python snippets.py list [-h] scene.appspot.com
错误:
错误:参数命令:无效选择:'[ - h]'(从中选择 'create-bucket','delete-bucket','get-bucket-labels', 'add-bucket-label','remove-bucket-label','list','list-with-prefix', '上传','下载','删除','元数据','make-public', 'signed-url','rename','copy')
我试过了:
python snippets.py [-h] list
错误:
Traceback (most recent call last):
File "snippets.py", line 322, in <module>
list_blobs(args.bucket_name)
File "snippets.py", line 88, in list_blobs
bucket = storage_client.get_bucket(bucket_name)
File "C:\Anaconda2\lib\site-packages\google\cloud\storage\client.py", line 172, in get_bucket
bucket = Bucket(self, name=bucket_name)
File "C:\Anaconda2\lib\site-packages\google\cloud\storage\bucket.py", line 113, in __init__
name = _validate_name(name)
File "C:\Anaconda2\lib\site-packages\google\cloud\storage\_helpers.py", line 39, in _validate_name
'Bucket names must start and end with a number or letter.')
ValueError: Bucket names must start and end with a number or letter.
当我跑步时:gsutil ls
我明白了:
gs://scene.appspot.com/
gs://staging.scene.appspot.com/
如何使用python snippets.py
命令?
最终,我希望用户能够通过Web浏览器将文件上传到云端存储。
答案 0 :(得分:1)
您在调用正确的命令语法时遇到问题。
错误:参数命令:无效选择:'[ - h]'
你不应该在命令中确实有[-h]
。方括号只是表示可选参数的标准符号。因此,您可以在命令中使用-h
(这表示您请求命令的帮助/使用屏幕,而不是实际尝试执行命令)或完全将其保留。
从您引用的页面:
运行此示例:
$ python snippets.py usage: snippets.py [-h] bucket_name {create-bucket,delete-bucket,get-bucket-labels,add-bucket-label,remove-bucket-label,list,list-with-prefix,upload,download,delete,metadata,make-public,signed-url,rename,copy} ...
因此命令期望第一个参数(在snippets.py
之后)成为存储桶名称,然后执行特定操作。根据操作,可能会有其他参数。
您使用的[-h]
被解释为参数并抛出解析器:
[-h]
被解释为存储桶名称,
scene.appspot.com
被解释为操作。但该操作不是有效的 - 因此是错误。[-h]
被解释为存储桶名称,'list'被解释为操作(此次是有效的),但是您有另一个参数(您尝试指定存储桶名称)这对list
操作来说意外 - 因此错误。list
被解释为存储桶名称而[-h]
被解释为操作 - 再次是无效的 - 因此错误。[-h]
被解释为存储桶名称,“list”被解释为操作(有效)。这次参数和操作的数量看起来是正确的,并且代码继续进行以验证存储桶名称,因为[-h]
不是有效的,因此失败了 - 因此错误。所以我试试(我不确定桶名称的实际预期格式):
python snippets.py scene.appspot.com list
python snippets.py gs://scene.appspot.com list
要将文件上传到存储桶(使用正确的存储桶名称格式,从以前的尝试确定,我从现在开始假设它是scene.appspot.com
),它可能是从以下开始:
python snippets.py scene.appspot.com upload
要查看此操作的预期语法,请添加-h
选项:
python snippets.py -h scene.appspot.com upload
注意:这整个方法都是命令驱动的,将文件从网络浏览器上传到云存储是一个完全不同的故事。我会问这个问题,有很多细节,因为可以有很多答案。