通过Python的subprocess模块运行mysqldump速度慢且冗长
@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()
这一行注释掉了。这个过程也很慢,尽管我在命令行中运行同样的命令时,它又快又简洁。我该如何在使用subprocess
时避免这些冗长的输出,并让它的运行速度更接近直接在命令行中执行的速度呢?
1 个回答
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 的时候,命令是一个字符串,而不是一个列表。