Gsutil: Impossible d'exécuter un gsutil séquentiel dans le fichier batch Windows

Créé le 1 nov. 2014  ·  12Commentaires  ·  Source: GoogleCloudPlatform/gsutil

J'utilise gsutil pour sauvegarder mes données dans Windows. Et mon fichier batch est comme ci-dessous:

gsutil cp -R a gs://zelon-test/
gsutil cp -R b gs://zelon-test/

Mais seule la première commande "gsutil cp -R a gs://zelon-test/" est exécutée. La deuxième commande n'est pas du tout exécutée.

Commentaire le plus utile

Je viens de tomber sur ce problème moi-même (j'exécute plusieurs commandes gcloud pour transférer des données périodiquement). Dans votre fichier batch, assurez-vous de faire précéder gcloud ou gsutil ou autre avec call , ainsi :

call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
...etc...

L'utilisation de call empêche la sortie du lot dès que son lot enfant se termine. Vous pouvez utiliser %ERRORLEVEL% pour vérifier le résultat de la commande appelée (les scripts GCP définissent cela de manière appropriée). Voir aussi http://ss64.com/nt/call.html

Tous les 12 commentaires

Salut - la première commande s'est-elle terminée avec un statut de sortie différent de 0 ? Cela entraînerait l'abandon du fichier batch.

J'ai testé comme ci-dessous :

a.exe
echo Le code de sortie est %errorlevel%
gsutil cp -R a gs://zelon-test/
echo Le code de sortie est %errorlevel%
gsutil cp -R b gs://zelon-test/
echo Le code de sortie est %errorlevel%

ci-dessous le résultat :

C:\Temp>test.bat

C:\Temp>a.exe

C:\Temp>echo Le code de sortie est 0
Le code de sortie est 0

C:\Temp>gsutil cp -R a gs://zelon-test/
Copie du fichier://a\find.txt [Content-Type=text/plain]...
Téléchargement de gs://zelon-test/a/find.txt : 36 Ko/36 Ko

C:\Temp>

La première commande echo est exécutée et affiche la valeur de retour de a.exe. Mais la deuxième commande echo (après la première commande gsutil) n'est pas exécutée. Il semble que gsutil tue le processus batch de Windows.

Je viens d'essayer d'exécuter le script suivant sur Windows 7 Ultimate avec Service Pack 1, et cela a fonctionné pour moi :

\Python27\python.exe \cygwin\usrlocal\bin\gsutil\gsutil cp c:\try.bat gs://my-bucket/1
\Python27\python.exe \cygwin\usrlocal\bin\gsutil\gsutil cp c:\try.bat gs://my-bucket/2


Quelle version de Windows utilisez-vous ?
Que se passe-t-il si vous modifiez les commandes pour exécuter gsutil en utilisant le chemin d'accès complet à l'interpréteur python et au script gsutil, similaire à ce que j'ai fait ci-dessus ?

Mike

J'ai traité ce problème avec vos conseils. Merci.

J'utilise Windows 8.1 Pro K (coréen) et la version python par défaut est 2.7.6 64 bits
Et j'ai essayé d'utiliser python avec le chemin complet comme vous l'avez mentionné. Ensuite, un message d'erreur est apparu comme ci-dessous :

Téléchargement de gs://zelon-test/a.exe : 14 Ko/14 Ko
ERREUR 1108 16:48:44.817000 http_wrapper.py] La réponse a renvoyé l'état 401, nouvelle tentative
ERREUR 1108 16:48:44.817000 http_wrapper.py] Nouvelle tentative de demande d'URL https://www.googleapis.com/upload/XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXV
XXuploadType=multipart après l'exception HttpError accédant field=generation%2Ccrc32c%2Cmd5Hash%2Csize&alt=json&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&prettyPrint=True&upload
Type=multipart> : réponse : <{'status' : '401', 'alternate-protocol' : '443:quic,p=0.01', 'content-length': '238', 'vary' :
'Origin, Referer, X-Origin', 'server' : 'UploadServer ("Construit le 29 octobre 2014 16:52:36 (1414626756)")', 'date' : 'Sat, 08 N
ov 2014 07:48:45 GMT', 'content-type' : 'application/json ; charset=UTF-8', 'www-authenticate' : 'Bearer realm="https://acc
ounts.google.com/AuthSubRequest"'}>, contenu <{
"Erreur": {
"les erreurs": [
{
"domaine": "global",
"raison": "obligatoire",
"message": "Connexion requise",
"locationType": "en-tête",
"emplacement": "Autorisation"
}
],
"code": 401,
"message": "Connexion requise"
}
}

J'ai donc utilisé "gcloud auth login" et je peux utiliser correctement test.bat pour le moment.

Avec une forme courte comme "gsutil", je ne peux toujours pas utiliser ce test.bat. Avec un chemin complet comme "C:\Python27\python.exe E:\Programs\google-cloud-sdk\platform\gsutil\gsutil.py", je peux utiliser ce test.bat

Salut - Je n'ai jamais réussi à faire fonctionner gsutil sous Windows sans chemins entièrement spécifiés - c'est ainsi que nous vous recommandons d'utiliser gsutil sous Windows (voir les onglets Windows des différents documents sur https://cloud.google.com /storage/docs/gsutil_install).

Je ferme ce problème car il fonctionne comme indiqué. Je suis content que vous ayez pu faire fonctionner les choses.

Merci. Cela m'a aussi aidé.

Je viens de tomber sur ce problème moi-même (j'exécute plusieurs commandes gcloud pour transférer des données périodiquement). Dans votre fichier batch, assurez-vous de faire précéder gcloud ou gsutil ou autre avec call , ainsi :

call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
...etc...

L'utilisation de call empêche la sortie du lot dès que son lot enfant se termine. Vous pouvez utiliser %ERRORLEVEL% pour vérifier le résultat de la commande appelée (les scripts GCP définissent cela de manière appropriée). Voir aussi http://ss64.com/nt/call.html

C'est la réponse ! Merci Marty !

"Il semble toujours y avoir un moyen d'arranger les choses." - Mac Gyver

En effet, merci Marty, je ne le savais pas non plus.

j'ai exactement le même problème mais lorsque j'utilise les chemins complets, j'utilise les chemins : "C:\Python27\python.exe" "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk \platformgsutilgsutil.py" cp %myfile.txt% gs://%myBucket%/%folder%/ obtenant l'exception :

ServiceException : 401 L'appelant anonyme n'a pas d'accès storage.objects.create à %myBucket%/%folder%/%myfile.txt%

cela ne se produit pas lorsque j'utilise la commande gsutil, une recommandation ?

j'ai exactement le même problème mais lorsque j'utilise les chemins complets, j'utilise les chemins : "C:\Python27\python.exe" "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk \platformgsutilgsutil.py" cp %myfile.txt% gs://%myBucket%/%folder%/ obtenant l'exception :

ServiceException : 401 L'appelant anonyme n'a pas d'accès storage.objects.create à %myBucket%/%folder%/%myfile.txt%

cela ne se produit pas lorsque j'utilise la commande gsutil, une recommandation ?

METTRE À JOUR:

Je parviens à contourner le problème en créant un nouveau processus pour chaque opération en tant qu'enfant du processus de fichier batch d'origine à l'aide de la commande d'appel. par conséquent, les commandes à l'intérieur des fichiers batch ressemblent maintenant à ceci :

* appeler cmd /c gsutil cp %file_1% gs://%bucket%/%folder%/ *
* appeler cmd /c gsutil cp %file_2% gs://%bucket%/%folder%/ *

notez que le /c permet au traitement par lots d'origine d'attendre l'autre sous-processus afin que toute l'opération ait l'air comme elle devrait être

Cette page vous a été utile?
0 / 5 - 0 notes