搜索

首页  >  问答  >  正文

解决在Python中运行需要密码的bash命令的方法

我正在编写一个Python函数,需要使用bash将MySQL数据库导出为.sql文件。我使用的是mysqldump命令。

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

这个命令对我的目的来说足够好用。我的问题是如何将它转换为可以从函数中运行的Python脚本。

我尝试使用os.system,但是在运行过程中需要在终端中输入密码。

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

输入密码:

我还尝试使用subprocesses模块,但是我对它一无所知。我只是得到了一些我不知道如何解决的错误。

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

我想知道是否有任何额外的参数或者其他东西可以添加,以便自动输入密码,这样函数就不需要询问密码了。

期望的结果是cloneDB()函数在不需要询问密码的情况下运行。

P粉476046165P粉476046165288 天前655

全部回复(1)我来回复

  • 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)

    回复
    0
  • 取消回复