Linux で小さな web-admin インターフェイスのルート MySQL パスワードを変更する Python スクリプトの一部を作成しようとしています。root パスワードの変更に関する MySQL の公式ドキュメントに従って、うまく機能する次のシェル スクリプトを作成しました。
shopt -s xpg_echo
# stopping running MySQL server
invoke-rc.d mysql stop
# creating init file in a mysqld readable location
cat > /var/lib/mysql/mysql-init <<END
UPDATE mysql.user SET Password=PASSWORD('x123') WHERE User='root';
FLUSH PRIVILEGES;
END
# running mysqld_safe with init-file in the background
mysqld_safe --init-file=/var/lib/mysql/mysql-init &
sleep 5
# stopping mysql
invoke-rc.d mysql stop
# deleting the init file
rm /var/lib/mysql/mysql-init
# starting mysql
invoke-rc.d mysql start
mysqld_safe を起動して数秒間実行し、invoke-rc.d で適切に停止する必要がある部分があります。シェルスクリプトでは、&
and で解決できsleep 5
ました。
私の問題は、 shell=True を使用せずに Python スクリプトでこれを行う方法がわからないことです。Popen と shlex.split(cmd) を使用して他のすべての部分を実行できますが、& は shlex.split(cmd) または shell=False を通過しないようです。
コマンドラインでの単純な問題&
ですか、それともこれには shell=True が本当に必要ですか? そうでない場合、スレッドを使用する必要がありますか?