gpt4 book ai didi

python - 将 subprocess.call 与 mysqldump 一起使用

转载 作者:可可西里 更新时间:2023-11-01 07:22:25 25 4
gpt4 key购买 nike

多年来我一直在使用 Windows 编写脚本,直到最近几周才开始考虑将 Python 作为替代方案。我正在尝试编写一个 native python 脚本来使用 mysqldump 备份 mysql 数据库。我通常使用命令行管道输出来执行此操作 > 没有问题。

我看到很多关于 subprocess.popen 和 shell=True 的答案,同样我看到很多陈述说我应该避免 shell=True

所以我试图获取以下代码以将我的标准输出重定向到一个文件,但都没有成功

sys.stdout=open("mysqldump.txt",'w')
print("testing line1")
subprocess.check_output(["mysqldump", "-u", "usernmae", "-ppassword", "-h", "dbserver_name", database_name])

如果我注释掉 sys.sdout 行,我会看到 sqldump 输出到我的屏幕,所以我知道这部分的语法是正确的。我添加了 print 语句,可以看到它被写入文件 mysqldump.txt。但是当完全运行时,没有转储到屏幕或文件

有什么想法吗?我试图避免使用 shell 解决方案

最佳答案

您尝试执行的操作无效,因为修改 sys.stdout 只会影响 Python 级别的语句,例如 print,而不会影响来自 C 的较低级别的写入,并且尤其不是那些由外部程序执行的。你想告诉 subprocess 创建一个 pipe,就像你对 > 重定向所做的那样,它是这样的:

with open("mysqldump.txt",'w') as out:
subprocess.check_call(["mysqldump", "-u", "usernmae", "-ppassword",
"-h", "dbserver_name", database_name],
stdout=out)

关于python - 将 subprocess.call 与 mysqldump 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24103542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com