Python脚本调用Sakura终端执行MySQL批处理文件遇问题求助
问题
需求是通过Python脚本打开Sakura终端,启动MySQL并执行指定的批处理文件,但当前存在两个问题:
- 执行带批处理的命令时,MySQL无法运行批处理文件
- 即使执行成功,Sakura终端也会迅速关闭,无法查看查询结果
现有代码
Python执行代码
def terminal(self): self.process = QProcess() self.process.start("/usr/bin/sakura -e mysql -pxxxxxx source studio.bat")
批处理文件studio.bat内容
USE w_office; SELECT * FROM `w_data` AS ' '; SELECT * FROM `w_hour` AS ' ';
可正常进入MySQL但无法执行批处理的命令
self.process.start("/usr/bin/sakura -e mysql -pxxxxxxxxx")
解决方案
方法1:通过bash包裹命令,执行后保持终端打开
调整命令格式,用bash -c组合MySQL执行批处理的操作,最后添加read让终端等待用户输入再关闭:
# 注意替换studio.bat为实际绝对路径(如果不在当前工作目录) self.process.start("/usr/bin/sakura -e bash -c 'mysql -pxxxxxx < studio.bat; read'")
方法2:使用MySQL的--init-file参数
利用MySQL官方提供的--init-file参数指定启动时执行的SQL文件,执行完成后会保持交互会话,终端不会自动关闭:
# 同样需要确保studio.bat路径正确 self.process.start("/usr/bin/sakura -e mysql -pxxxxxx --init-file=studio.bat")
关键说明
- 直接在
mysql命令后加source无法正确解析,因为-e参数后的内容需要是单个MySQL命令,而source是MySQL交互模式下的命令,无法直接作为命令行参数执行。 - 添加
read或使用--init-file保持交互,是为了避免Sakura终端在命令执行完成后立即退出,让你能查看查询结果。
内容的提问来源于stack exchange,提问作者user17565490
相关产品推荐
相关产品推荐

