1

データベースを復元するためのPythonスクリプトを作成しようとしています。すべてのテーブルを(個別に)リポジトリに保存します。「sourcetable1.sql、source table2.sql、..」と入力するのは面倒なので、これを自動的に行うスクリプトを作成しました。

Popenを使用した解決策を見つけました。

process = Popen('mysql %s -u%s -p%s' % (db, "root", ""), stdout=PIPE, stdin=PIPE, shell=True) output = process.communicate('source' + file)[0]

この方法は非常にうまく機能しているように見えますが、テーブルごとにパスワードの入力を求められます。これをバイパスして、パスワードの入力を1回だけ要求するか、サブプロセスに構成ファイルからパスワードを読み取らせるにはどうすればよいですか?

これを行うためのより良い方法はありますか?私はWindowsバッチスクリプトを使用してこれを実行しようとしましたが、ご想像のとおり、これはpythonを使用するよりもはるかに柔軟性がありません(たとえば)

4

3 に答える 3

3

どうやらパスワードが空のようですので、-p オプションを削除してください。パスワードを指定しないで -p を指定すると、mysql プロンプトが表示されます

from subprocess import Popen, PIPE

process = Popen('mysql %s -u%s' % (db, "root"), stdout=PIPE, stdin=PIPE, shell=True)
output = process.communicate('source' + file)[0]
于 2012-07-03T19:58:34.583 に答える
2

実行中のプロセスを表示する権限を持つユーザーにパスワードが公開されないようにするには、パスワードを構成ファイルに入れて、コマンドラインから呼び出すのが最善です。

構成ファイル:

[client]
host=host_name
user=user_name
password=your_pass

次に、コマンドライン:

mysql --defaults-extra-file = your_configfilename

于 2012-07-03T08:01:55.447 に答える
-1

ファイルから読み取った後、コマンドラインで渡すことができます

with open('secret_password.txt', 'r') as f:
    password = f.read()
process = Popen('mysql %s -u%s -p%s' % (db, "root", password), stdout=PIPE, stdin=PIPE, 

それ以外の場合は、プロセスと対話できる pexpect を調べることができます。構成ファイル (ConfigParser など) から読み取るか、単純に Python モジュールにしてパスワードを変数としてインポートするためのその他の方法。

于 2012-07-03T07:32:08.950 に答える