インストーラーがシェル スクリプトとして記述され、対話形式で実行されるインストーラー スクリプトの自動化に取り組んでいます。コードは次のとおりです。
print "Installing the build using command: \n" + str(cmd)
proc = Popen(cmd,
stdin=PIPE,
stdout=PIPE,
stderr=PIPE,
shell=True
)
proc.stdin.flush()
proc.stdin.write("y\n")
proc.stdin.flush()
proc.stdin.write("y\n")
proc.stdin.flush()
proc.stdin.write("root\n")
print "Aftre user name"
proc.stdin.flush()
proc.stdin.write("password\n")
proc.stdin.flush()
(stdout, stderr) = proc.communicate("\n")
print "Build %s is installed successfully" % build
proc.stdin.close()
print stderr
print stdout
コマンドが手動で実行されている間、次のような出力が表示されます。
press y to continue or c to cancel:
.
.
press y to continue or c to cancel:
.
.
Enter Mysql user name:
Enter password:
しかし、最後の stdin (パスワードを入力するためのコードで使用) が機能していません。原因としては、Enter password コマンドがインストーラーのスクリプトに記述されていない可能性があります。mysql -p コマンドの出力です。
いくつかの理由により、mysql のパスワードを保存していません。そのため、パスワードはコマンドのパラメーターとして直接送信されません。最も重要なのは、サードパーティのライブラリを使用できないことです。
これに取り組んでいる間、私は以下の疑問を思いつきました:
- shell=False を指定してシェル コマンドを実行する機会はありますか (File not found 例外が発生します)、この状況で本当に役に立ちますか?
- シェルではない別のプロセスとしてパスワードを入力する方法はありますが、コマンドを使用せずにプロセスを開始するにはどうすればよいですか?
- Enter password がシェル コマンドとして扱われないのはなぜですか。
Python およびインストーラー スクリプトで機能するものがあるかどうかを提案してください。