2017-11-16 3 views
0

Ich versuche zu lernen, wie man Dateien in einem Bucket auf Google Cloud Storage hochlädt. fand ich diesen Code: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/storage/cloud-client Dies kann eine Reihe von Operationen tut create-Eimer, delete-Eimer, Liste, Upload und Download ...Wie lade ich Dateien in einem Bucket auf Google Cloud Storage mit python snippets.py hoch?

Aber ich bin nicht in der Lage, den Code auszuführen.

Ich habe versucht:

python snippets.py [-h] scene.appspot.com list 

Fehler:

error: argument command: invalid choice: 'scene-maker.appspot.com' (choose from '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')

Ich habe versucht:

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 

Fehler:

error: unrecognized arguments: scene.appspot.com 
error: unrecognized arguments: gs://scene.appspot.com 

Ich habe versucht:

python snippets.py list [-h] scene.appspot.com 

Fehler:

error: argument command: invalid choice: '[-h]' (choose from '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')

Ich habe versucht:

python snippets.py [-h] list 

Fehler:

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. 

Wenn ich laufen: gsutil ls ich:

gs://scene.appspot.com/ 
gs://staging.scene.appspot.com/ 

Wie python snippets.py Befehl benutzen? Letztendlich möchte ich, dass Benutzer Dateien von einem Webbrowser auf Cloud Storage hochladen können.

Antwort

1

Sie haben Probleme beim Aufrufen der richtigen Befehlssyntax.

error: argument command: invalid choice: '[-h]'

Sie sollten nicht wörtlich [-h] im Kommando haben. Die eckigen Klammern sind nur eine Standardnotation, um optionale Argumente anzugeben. Entweder verwenden Sie entweder -h in dem Befehl (was anzeigt, dass Sie die Hilfe-/Verwendungsanzeige des Befehls anfordern, anstatt tatsächlich die Ausführung des Befehls zu versuchen) oder lassen Sie sie vollständig weg.

Von der Seite, die Sie verweisen:

To run this sample:

$ 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} 
        ... 

So ist der Befehl das erste Argument (nach snippets.py) erwartet, dass der Eimer Name sein, von einer bestimmten Operation gefolgt durchgeführt werden. Abhängig von der Operation können andere Argumente folgen.

Die [-h] Sie dient als Argument interpretiert und führt den Parser aus:

  • im ersten Versuch [-h] als Bucket-Namen und scene.appspot.com wie die Operation interpretiert. Aber diese Operation ist nicht gültig - daher der Fehler.
  • in der 2. Gruppe von Versuchen [-h] wird als Bucket-Name interpretiert, "Liste" als Operation (eine gültige diesmal), aber dann haben Sie ein anderes Argument (Ihre Versuche, den Bucket-Namen angeben), die unerwartet ist die list Operation - daher die Fehler.
  • im dritten Versuch list wird als Bucket-Name und [-h] als Operation interpretiert - wieder ein ungültiger - daher der Fehler.
  • im vierten Versuch [-h] wird als Bucket-Name interpretiert, 'Liste' als die Operation (gültig). Diesmal scheint die Anzahl der Argumente und der Vorgang korrekt zu sein und der Code fährt fort, um den Bucket-Namen zu validieren, was fehlschlägt, da [-h] kein gültiger ist - daher der Fehler.

Also würde ich versuchen (Ich bin nicht sicher über das tatsächliche erwartete Format für den Eimer Namen):

python snippets.py scene.appspot.com list 
python snippets.py gs://scene.appspot.com list 

Um Datei auf den heißen Stein zu laden (verwenden Sie das richtige Eimer Namensformat aus der Bestimmung vorheriger Versuch, ich nehme an, es ist scene.appspot.com von jetzt an), ist es wahrscheinlich mit etwas beginnen:

python snippets.py scene.appspot.com upload 

Um die erwarteten Syntax für diesen Vorgang zu sehen fügen sie die -h Option:

python snippets.py -h scene.appspot.com upload 

Hinweis: Das ganze Verfahren ist befehlsgesteuerte, Dateien von einem Web-Browser zu Cloud Storage-Upload ist eine ganz andere Geschichte. Ich würde das als eine separate Frage mit vielen Details fragen, da es viele Antworten darauf geben kann.

+0

Es funktioniert! Vielen Dank für die Erklärung. – Beginner

Verwandte Themen