2014-06-08 46 views
3

我一直在使用Windows腳本多年,並且只開始看python作爲過去幾周的替代方案。我正在嘗試編寫一個本地python腳本來用mysqldump備份一個mysql數據庫。我通常使用命令行來管理輸出>而沒有問題。使用subprocess.call與mysqldump

我看到subprocess.popen和殼=真多的答案,同樣我看到許多發言說,我應該避免殼=真

所以我試圖讓下面的代碼,以我的標準輸出重定向到一個文件,均無功而返

sys.stdout=open("mysqldump.txt",'w') 
print("testing line1") 
subprocess.check_output(["mysqldump", "-u", "usernmae", "-ppassword", "-h", "dbserver_name", database_name]) 

如果我註釋掉sys.sdout行我看到sqldump輸出到我的屏幕,所以我知道我的語法正確,此部分。我添加了print語句,並可以看到它被寫入文件mysqldump.txt。但是,當完整運行沒有轉儲到屏幕或文件

任何想法?我試圖避免使用shell解決方案

回答

4

您嘗試執行的操作不起作用,因爲修改sys.stdout僅影響Python級別的語句,如print,而不是來自C的低級別寫入,尤其是不是由外部程序執行的寫入。你要告訴subprocess創建,就像你與>重定向,這是這樣做的:

with open("mysqldump.txt",'w') as out: 
    subprocess.check_call(["mysqldump", "-u", "usernmae", "-ppassword", 
          "-h", "dbserver_name", database_name], 
          stdout=out) 
+1

謝謝這工作一個治療:-) – Rob

+0

什麼是'dbserver_name'?它是本地主機嗎? – OPV

+0

@OPV推測它是db運行的服務器的主機名。 'mysqldump'的參數是從問題中複製而來的,你必須詢問OP(或者查閱[文檔](https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html# mysqldump-syntax))關於它們的含義。 – user4815162342

2

您可以使用--result-file = file參數爲mysqldump嗎?

可能必須將check_output更改爲subprocess.call才能完成此操作。

subprocess.call(["mysqldump", "-u", "usernmae", "-ppassword", "-h", "dbserver_name", database_name],stdout=open('myfile.txt','w')) 

編輯:子完成後的myfile.txt將關閉。

+0

感謝,這也是工作。兩個很好的答案,我花了很長時間嘗試各種方法 – Rob

+0

也許是upvote – jwillis0720

+0

我需要15的聲譽:-(仍然是新的在stackoverflow – Rob