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 で使用されている引数パーサーに関係していると思われます。2 つの引数形式 ('-u' の後に 'Dmitriy') を使用すると、空白が削除されます (これは理にかなっています)。単一の形式 ('-u Dmitriy') を指定すると、ユーザー名の前に空白があることを意味します。

于 2013-10-11T09:46:48.900 に答える