簡體   English   中英

使用subprocess.call和mysqldump

[英]using subprocess.call with mysqldump

我已經用windows編寫了多年的腳本,並且在過去的幾周里才開始將python作為替代品。 我正在嘗試編寫一個本機python腳本來使用mysqldump備份mysql數據庫。 我通常使用命令行管道輸出>沒有問題。

我看到subprocess.popen和shell = True有很多答案,同樣我看到很多語句說我應該避免使用shell = True

所以我試圖獲取以下代碼將我的stdout重定向到一個文件,都沒有成功

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解決方案

您嘗試執行的操作不起作用,因為修改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)

你能為mysqldump使用--result-file = file參數嗎?

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

要么

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

編輯:myfile.txt將在子進程完成后關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM