我正在尝试编写 Python 脚本的一部分,该脚本会在 Linux 下为小型 Web 管理界面更改根 MySQL 密码。我遵循了关于更改 root 密码的官方 MySQL 文档,并提出了这个 shell 脚本,效果很好:
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 很好地停止它。在 shell 脚本中,我可以用&
and来解决它sleep 5
。
我的问题是我不知道如何在不使用 shell=True的情况下在 Python 脚本中执行此操作。我可以使用 Popen 和 shlex.split(cmd) 完成所有其他部分,但是 & 似乎既没有通过 shlex.split(cmd) 也没有通过 shell=False。
这只是&
命令行中的一个简单问题,还是我真的需要 shell=True 呢?如果没有,我需要使用线程吗?