python - 用python执行mysqldump并通过stdin设置密码

标签 python mysql subprocess

我想在 python 中执行 mysqldump 并在 mysqldump 请求时提供密码。

在命令行中添加密码不是一个选项,它必须通过标准输入提供。

这是我到目前为止所做的: 命令 = [ 'mysqldump', '-h', mysqlhost, '-P',mysql端口, '-u',mysql用户, '-p', mysql数据库 ]

mysqlfile = mysqlpath + "/" + mysqldb + ".sql"
with open(mysqlfile, "w+") as file:
    p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=file)
    p.communicate(input=mysqlpass)
    p.wait()

但是当我执行代码时,终端挂起请求密码。

谢谢。

最佳答案

您可以为此使用 pexpect。这是经过修改的代码,因为我必须对其进行测试,但你明白了:

import pexpect

command2 = 'mysqldump -h localhost -u root -p xyzzy'

mysqlfile = "/tmp/foo.sql"
with open(mysqlfile, "w+") as file:
    p = pexpect.spawn(command2)
    p.expect("Enter password: ")
    p.sendline("foobar")
    q = p.read()
    p.wait()
    file.write(q)

这里“foobar”是我的数据库密码。

汉奴

关于python - 用python执行mysqldump并通过stdin设置密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40590139/

相关文章:

Python 和 Pandas - 确定帐单是否逾期

MySQL : How to give a default value to a foreign key when I don't use it?

mysql - 如何添加可为空的列作为表的主组合键的一部分?

python - 将多个 Popen 命令与管道链接起来

python - 什么是 spec 和 spec_set

python - Django:如何在 django 中循环查询集并将 bool 字段更改为 True?

python - 无 IDLE 子进程连接

python - 为什么此 Popen 调用在 Django 2.0 中返回 "io.UnsupportedOperation: fileno"错误?

python - 包含表单的 Django ListView

php - Logout.php 不会破坏 cookie 或登录名