一、QProcess 核心功能
QProcess 是 Qt 框架中用于启动外部程序并与其交互的核心类。主要功能包括:
- 进程启动与控制:支持同步(
execute()
)和异步(start()
)执行外部程序。 - 进程通信:通过标准输入(stdin)、输出(stdout)和错误输出(stderr)通道与子进程交互。
- 状态监控:通过信号(如
started()
、finished()
)实时跟踪进程状态。 - 资源管理:提供
kill()
和terminate()
强制终止进程,并支持自动释放资源
二、基本使用步骤
1. 启动外部程序
需明确指定程序路径和参数,避免直接传递完整命令字符串(旧版已弃用):
from PySide6.QtCore import QProcess
process = QProcess()
process.setProgram("python3") # 设置程序路径
process.setArguments(["-i"]) # 设置参数(如交互模式)
process.start() # 启动进程
⚠️ 注意:旧版 start("python dummy.py")
已弃用,需分离程序名和参数 。
2. 处理输入输出
通过信号与槽机制实现异步通信,避免阻塞主线程:
# 连接输出信号到处理函数
process.readyReadStandardOutput.connect(handle_stdout)
process.readyReadStandardError.connect(handle_stderr)
def handle_stdout():
data = process.readAllStandardOutput()
print("标准输出:", data.data().decode())
def handle_stderr():
data = process.readAllStandardError()
print("错误输出:", data.data().decode())
3. 进程状态监控
-
信号绑定:监听进程启动、结束和错误事件:
process.started.connect(lambda: print("进程已启动")) process.finished.connect(lambda: print("进程结束,退出码:", process.exitCode())) process.errorOccurred.connect(lambda err: print("错误发生:", err))
-
状态查询:通过
state()
获取当前状态(QProcess.NotRunning
、QProcess.Running
)。
4. 进程终止与资源释放
-
强制终止:
terminate()
:发送终止信号(允许进程清理资源)。kill()
:立即终止进程(可能残留资源)。
if process.state() == QProcess.Running:
process.terminate()
process.waitForFinished(3000) # 最多等待3秒
自动释放:通过 deleteLater()
延迟删除对象:
process.finished.connect(process.deleteLater)