Maison > Questions et réponses > le corps du texte
J'écris une fonction Python qui doit exporter une base de données MySQL vers un fichier .sql à l'aide de bash. J'utilise la commande mysqldump.
mysqldump -u bandana -p movies > /Users/Mac/Downloads/testOutput.sql
Cette commande fonctionne assez bien pour mes besoins. Ma question est de savoir comment convertir cela en un script Python pouvant être exécuté à partir d'une fonction.
J'ai essayé d'utiliser os.system, mais cela nécessite un mot de passe dans le terminal pendant le fonctionnement.
def cloneDB(): os.system("mysqldump -u bandana -p movies > /Users/Tis_Me/Downloads/testOutput.sql") 输入密码:
J'ai également essayé d'utiliser le module de sous-processus, mais je n'y connais rien. Je reçois juste quelques erreurs que je ne sais pas comment corriger.
def cloneDB(): subprocess.run(["mysqldump", "-u bandana", "-p movies", "> /Users/Tis_Me/Downloads/testOutput.sql"])
Je me demandais s'il y avait des paramètres supplémentaires ou quelque chose d'autre que je pourrais ajouter pour saisir automatiquement le mot de passe afin que la fonction n'ait pas besoin de demander le mot de passe.
Le résultat souhaité est que la fonction cloneDB() s'exécute sans demander de mot de passe.
P粉6475042832024-03-23 10:40:23
Vous pouvez mettre le mot de passe directement dans la ligne de commande, immédiatement après -p
Vous ne pouvez pas non plus mettre la redirection de sortie dans la liste des paramètres. C'est la syntaxe du shell, pas les paramètres de commande. Vous pouvez utiliser l'option subprocess.run()
的stdout
pour rediriger sa sortie.
def cloneDB(): password = "something" with open("/Users/Tis_Me/Downloads/testOutput.sql", "w") as sqlfile: subprocess.run(["mysqldump", "-u", "bandana", f"-p{password}", "movies"], stdout=sqlfile)