1

我有这个简单的代码:

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到命令行-一切正常。

任何建议为什么会发生这种情况?

4

1 回答 1

1

在我的机器上,我可以通过删除 -u 和用户名之间的空格来修复它。

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

编辑:只是想添加一些推理

列表中的每个参数都被转义。所以你的第一个命令更像是:

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

如果您从命令行尝试,您会看到它失败并出现相同的错误,而这有效

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

我想这与mysql中使用的参数解析器有关。两个参数形式('-u' 后跟 'Dmitriy')将去除空格(这是有道理的)。如果你给它一个单一的形式('-u Dmitriy')你对它说 - 用户名前面有一个空格。

于 2013-10-11T09:46:48.900 回答