2015-03-09 3 views
2

En Python, j'utilise le sous-processus pour appeler gsutil pour copier et déplacer des commandes, mais je suis actuellement incapable de sélectionner plusieurs extensions.Le sous-processus python ne fonctionnera pas bien avec les commandes de copie/déplacement de gsutil

Les mêmes œuvres de commande gsutil au terminal, mais pas en python:

cmd_gsutil = "sudo gsutil -m mv gs://xyz-ms-media-upload/*.{mp4,jpg} gs://xyz-ms-media-upload/temp/" 
p = subprocess.Popen(cmd_gsutil, shell=True, stderr=subprocess.PIPE) 
output, err = p.communicate() 

Si dire qu'il ya quatre types de fichiers pour se déplacer, mais le seau est vide, l'erreur gsutil du terminal est de retour:

4 files/objects could not be transferred. 

Alors que l'erreur renvoyée lorsqu'il est exécuté par le sous-processus est:

1 files/objects could not be transferred. 

Alors clairement sous-processus est en quelque sorte la commande en bloc la commande en quelque sorte ...

Je pourrais toujours inefficacement répéter la commande pour chacun des types de fichiers, mais je préférerais aller au fond de cela!

Répondre

2

Il semble, /bin/sh (le shell par défaut) ne supporte pas la syntaxe {mp4,jpg}. Passez le , pour l'exécuter en tant que commande bash à la place.

Vous pouvez également exécuter la commande sans le shell, par exemple, en utilisant les modules glob ou fnmatch pour obtenir les noms de fichiers pour construire la commande gsutil. Note: vous devriez passer la commande comme une liste dans ce cas à la place.