2009-12-30 16 views
0

J'ai quelques problèmes en utilisant subprocess.call pour exporter une base de données en utilisant mysqldump. J'utilise Python 3.1 installé sur Windows 7.Qu'est-ce qui cause subprocess.call à sortir le fichier vide lors d'une tentative d'export db avec mysqldump?

from time import gmtime, strftime 
import subprocess 

DumpDir = "c:/apps/sqlbackup/"; 
DumpFile = "mysqldump-" + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) + ".sql"; 

params = [r"mysqldump --user root --password=mypassword --force --flush-privileges --compress --comments mydatabase --result-file=" + DumpDir + DumpFile]; 

subprocess.call(params, shell=True); 

Le code ci-dessus provoque un fichier vide à créer dans le DUMPDIR.

J'ai essayé d'obtenir python d'imprimer la commande pour que je puisse le tester via l'invite CMD en utilisant:

print(subprocess.list2cmdline(params)); 

Si je colle la sortie à l'invite CMD et l'exécuter, tout fonctionne très bien.

Des idées?

Je suis nouveau sur Python, donc je suis sûr que la réponse est simple mais j'ai essayé tellement de variations pour que ça marche que je n'arrive pas à comprendre ça.

Répondre

0

Je suis incertain de ce qui a causé exactement le problème, mais le code ci-dessus fonctionne maintenant après:

  1. réinitialiser l'environnement PATH défini dans Windows pour être sûr que le chemin d'accès mysqldump est ajouté à chaque fois que le PC bottes.
  2. J'ai redémarré le PC (pour assurer Python/MySQL ont été redémarrés et paramètres d'environnement PATH étaient définitivement correct).

Le problème semble être résolu maintenant, ce qui est un peu étrange. Le fait que le fichier .sql était en cours de création mais était vide indiquait que mysqldump était exécuté par Python. Je ne suis pas sûr pourquoi le fichier de sortie était vide lorsqu'il est exécuté par Python par rapport à l'exécution de la même commande mysqldump à partir de l'invite CMD fourni une exportation réussie.