2010-10-13 96 views
1
@cost_time 
def dbdump_all(): 
    "导出数据库所有数据至当前目录下以年月日命名的sql文件" 
    filename=datetime.datetime.now().strftime("%Y-%m-%d") 
    cmd="""mysqldump -u root -pzhoubt --opt --quick --database search > ./%s.sql"""%filename 
    args=shlex.split(cmd) 
    p=subprocess.Popen(args) 
    #stdout, stderr = p.communicate() 
    #print stdout,stderr 
    print "已将数据库表结构和数据导出到%s"%filename 

我在子进程使用mysqldump命令,它输出了很多关于导出的数据信息,即使我注释掉stdout, stderr = p.communicate()线。它也很慢,尽管我已经在shell中尝试了相同的命令,并且它非常快速和简洁。如何避免使用subprocess时的所有冗长,并且加快所花的时间更像是直接从shell运行它的时间?运行mysqldump的是缓慢而冗长

+0

我有我自己做完了在子进程上添加一个参数(shell = True) – mlzboy 2010-10-13 03:00:11

+0

如果添加'shell = True'修复它,您可以添加该问题作为您自己问题的答案,并在两天内接受它 – 2010-10-13 03:05:00

+0

对不起,对于我的照顾,它仍然没有工作,虽然它没有显示详细信息,但我没有找到结果sql文件 – mlzboy 2010-10-13 03:20:14

回答

2
@cost_time 
def dbdump_all(): 
    "导出数据库所有数据至当前目录下以年月日命名的sql文件" 
    filename=datetime.datetime.now().strftime("%Y-%m-%d")+".sql" 
    cmd="""mysqldump -u root -pzhoubt --opt --quick --database search >./%s"""%filename 
    print cmd 
    p=subprocess.Popen(cmd,shell=True,cwd=os.getcwd()) 
    sts = os.waitpid(p.pid, 0)[1] 
    print "返回状态%s"%sts 
    print "已将数据库表结构和数据导出到%s"%filename 

终于我知道了, 关键是我们os.waitpid等待mysql的处理, 另一点是,当你使用shell的CMD是一个字符串不是列表