2010-10-13 97 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是一個字符串不是列表