So lösen Sie das Problem der Ausführung von Bash-Befehlen, für die in Python ein Kennwort erforderlich ist
P粉476046165
P粉476046165 2024-03-22 13:20:24
0
1
602

Ich schreibe eine Python-Funktion, die eine MySQL-Datenbank mithilfe von Bash in eine SQL-Datei exportieren muss. Ich verwende den Befehl mysqldump.

mysqldump -u bandana -p movies > /Users/Mac/Downloads/testOutput.sql

Dieser Befehl funktioniert für meine Zwecke gut genug. Meine Frage ist, wie man dies in ein Python-Skript umwandelt, das von einer Funktion ausgeführt werden kann.

Ich habe versucht, os.system zu verwenden, aber während des Betriebs ist ein Passwort im Terminal erforderlich.

def cloneDB():
    os.system("mysqldump -u bandana -p movies > /Users/Tis_Me/Downloads/testOutput.sql")

输入密码:

Ich habe auch versucht, das Unterprozessmodul zu verwenden, aber ich weiß nichts darüber. Ich bekomme nur ein paar Fehler, von denen ich nicht weiß, wie ich sie beheben kann.

def cloneDB():
    subprocess.run(["mysqldump", "-u bandana", "-p movies", "> /Users/Tis_Me/Downloads/testOutput.sql"])

Ich habe mich gefragt, ob ich zusätzliche Parameter oder etwas anderes hinzufügen könnte, um das Passwort automatisch einzugeben, damit die Funktion nicht nach dem Passwort fragen muss.

Das gewünschte Ergebnis ist, dass die Funktion cloneDB() ausgeführt wird, ohne nach einem Passwort zu fragen.

P粉476046165
P粉476046165

Antworte allen(1)
P粉647504283

您可以将密码直接放在命令行中,紧跟在-p之后

您也不能将输出重定向放在参数列表中。那是shell语法,而不是命令参数。您可以使用subprocess.run()stdout选项来重定向其输出。

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)
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage