2013-10-11 80 views
1

我有這個簡單的代碼:錯誤運行mysqldump的 - 拒絕訪問

cmd = ["mysqldump", "-u Dmitriy", "-pMyPass", "dmitrii"] 
p = subprocess.Popen(cmd, stdout = file) 

如果我嘗試去執行它 - 我得到一個錯誤:

mysqldump: Got error: 1045: Access denied for user ' Dmitriy'@'localhost' (using password: YES when trying to connect.

如果我複製粘貼這(mysqldump -u Dmitriy -pMyPass dmitrii)到命令行 - 一切正常。

任何建議爲什麼會發生這種情況?

回答

1

在我的機器上,我可以通過刪除-u和用戶名之間的空格來修復它。

cmd = ["mysqldump", "-uDmitriy", "-pMyPass", "dmitrii"] 

編輯:只是想補充一些推理

每個參數在列表中逃脫。所以,你的第一個命令更像是:

mysqldump '-u Dmitriy' '-pMyPass' 'dmitrii' 

如果您嘗試在命令行中,你會看到它失敗了同樣的錯誤,而這個工程

mysqldump '-uDmitriy' '-pMyPass' 'dmitrii' 

我想這是做在mysql中使用的參數解析器。這兩個參數形式('-u'後面跟着'Dmitriy')將刪除空白(這是有道理的)。如果你給它單一的形式('-u Dmitriy'),你就是這麼說的 - 用戶名前面有一個空格。

+0

哇,工作。 )沒有預料到這一點。 – Anarion

+0

自從您發佈後,我一直在嘗試,但需要10分鐘才能接受。 – Anarion

+0

啊有趣 - 沒有意識到。 –