@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运行它所需的时间?
答案 0 :(得分: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是一个不是列表的字符串