使用subprocess.call和mysqldump

时间:2014-06-08 06:20:27

标签: python subprocess mysqldump

我已经使用windows编写了多年的脚本,并且在过去的几周里才开始将python作为替代品。我试图编写一个本机python脚本来使用mysqldump备份mysql数据库。我通常使用命令行管道输出>没有问题。

我看到subprocess.popen和shell = True有很多答案,同样我看到很多声明说我应该避免shell = True

所以我试图让以下代码将我的stdout重定向到一个文件,但都没有成功

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解决方案

2 个答案:

答案 0 :(得分:5)

您尝试做的事情并不起作用,因为修改sys.stdout只影响Python级语句,例如print,而不影响C级的低级写入,特别是不会影响外部计划。您想告诉subprocess创建管道,就像使用>重定向一样,这样做:

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

答案 1 :(得分:2)

你能为mysqldump使用--result-file = file参数吗?

可能必须将check_output更改为subprocess.call才能完成此操作。

subprocess.call(["mysqldump", "-u", "usernmae", "-ppassword", "-h", "dbserver_name", database_name],stdout=open('myfile.txt','w'))

编辑:myfile.txt将在子进程完成后关闭。