我有这个简单的代码:
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
)复制粘贴到命令行 - 一切正常。
为什么会发生这种情况的任何建议?
答案 0 :(得分:1)
在我的机器上,我可以通过删除-u和用户名之间的空格来修复它。
cmd = ["mysqldump", "-uDmitriy", "-pMyPass", "dmitrii"]
编辑:只是想添加一些推理
列表中的每个参数都会被转义。所以你的第一个命令更像是:
mysqldump '-u Dmitriy' '-pMyPass' 'dmitrii'
如果您从命令行尝试这样做,您将看到它失败并出现相同的错误,而这是有效的
mysqldump '-uDmitriy' '-pMyPass' 'dmitrii'
我想这与mysql中使用的参数解析器有关。两个参数形式('-u'后跟'Dmitriy')将删除空格(这是有道理的)。如果你给它一个单独的形式('-u Dmitriy'),你就是在说 - 用户名前面有一个空格。