2015-11-20 1 views
0

Je crée une routine que je configurerai en tant que tâche planifiée dans Windows pour prendre automatiquement une copie de notre base de données et la publier sur un serveur Web pour téléchargement par nos clients.Utilisation de subprocess.call avec des variables

J'ai tout travaillé en utilisant des chaînes statiques dans les arguments de l'appel de sous-processus qui utilise 7-zip pour créer une archive auto-extractible. Cependant, lorsque j'ai essayé de rendre la logique un peu plus agnostique en utilisant os.path.join et os.path.dirname pour déterminer dynamiquement les valeurs d'argument pour la fonction subprocess.call, les choses ont cessé de fonctionner.

Je n'arrive pas à comprendre ce qui ne va pas parce que lorsque je l'exécute dans la console cmd en fournissant des chaînes statiques comme arguments, cela fonctionne très bien. En outre, cela fonctionne très bien avec Python lorsque j'utilise des chaînes statiques. Ce n'est que lorsque j'introduis les variables et les fonctions dans les arguments pour essayer de déterminer dynamiquement les valeurs des arguments et qu'aucun code d'erreur ou message n'est fourni.

# Get the Database location 
localGDB = os.path.join(os.path.dirname(__file__), r"Resources\MyDatabase.gdb") 

# Wrap the local File Geodatabase into a self-extracting exe 
print "Wrapping local database..." 
try: 
    subprocess.Popen([str(os.path.join(os.path.dirname(__file__), r"Resources\7z\7-Zip64\7z.exe")), 
        "a", 
        "-sfx", 
        str(os.path.join(os.path.dirname(__file__), "MyDatabase.exe")), 
        str(localGDB)]) 
except Exception as e: 
    ctypes.windll.user32.MessageBoxA(0, "An error occured while wrapping the database." + e.message, "ERROR", 0 | 0x10) 
    sys.exit(1) 
+1

Vous devriez être plus strict sur le type d'exception que vous autorisez. –

+0

Je voudrais si je pouvais avoir une idée de ce genre d'exception se produit. – MrBubbles

+2

Lorsque je suis dans cette situation, je supprime le bloc try sauf. Ensuite, si une exception est levée, elle me dit le type. –

Répondre

2

Si les fenêtres, je suggérerais courir subprocess.check_output()

0

Merci à tous. Après avoir pris le conseil de tdelaney de vérifier les chemins, j'ai trouvé que le chemin 7zip était incorrect.