通过Python运行mysqldump';s子流程模块速度慢且冗长

通过Python运行mysqldump';s子流程模块速度慢且冗长,python,mysql,import,subprocess,Python,Mysql,Import,Subprocess,我在子流程中使用了mysqldump命令,它输出了大量关于导出数据的信息,即使我注释掉了stdout,stderr=p.communicate()行。它也非常慢,尽管我在shell中尝试过相同的命令,而且非常快速和简洁。如何在使用子流程时避免所有冗长的内容,并加快所需的时间,使其更像是直接从shell运行它 @cost_time def dbdump_all(): "导出数据库所有数据至当前目录下以年月日命名的sql文件" filename=datetime.datetime.n

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

@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
我终于明白了, 关键是us os.waitpid等待mysql处理,
另一点是,当你使用shell时,cmd是一个字符串而不是一个列表

我自己已经完成了在subprocess上添加一个参数(shell=True)如果添加
shell=True
修复了它,你可以添加它作为你自己问题的答案,并在两天内接受它,但是我没有找到结果sql文件
@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