2013-10-11 60 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

啊有趣 - 没有意识到。 –