suchen

Heim  >  Fragen und Antworten  >  Hauptteil

So lösen Sie das Problem der Ausführung von Bash-Befehlen, für die in Python ein Kennwort erforderlich ist

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粉476046165P粉476046165246 Tage vor605

Antworte allen(1)Ich werde antworten

  • P粉647504283

    P粉6475042832024-03-23 10:40:23

    您可以将密码直接放在命令行中,紧跟在-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)

    Antwort
    0
  • StornierenAntwort