如何使用 Ctrl+C 输入干净地退出 QProcess?
Posted
技术标签:
【中文标题】如何使用 Ctrl+C 输入干净地退出 QProcess?【英文标题】:How to cleanly exit a QProcess with Ctrl+C input? 【发布时间】:2020-03-12 09:37:23 【问题描述】:我正在运行一个 QProcess 事件,该事件在 cmd 中直接按 Ctrl+C 时退出。如何从 python 发送信号以干净地关闭进程?我试过 kill() ,它不会让程序相应地保存。 terminate() 也没有响应。我希望你能帮忙。
self.btn_1 = QPushButton('Start')
self.btn_1.clicked.connect(self.start)
self.btn_2 = QPushButton('Stop')
self.btn_1.clicked.connect(self.stop)
self.process = QProcess()
def start(self):
self.process.start("C:\path\program.exe")
def stop(self):
print('Stop the process!')
【问题讨论】:
【参考方案1】:您需要获取进程PID,然后您可以通过os.kill
发送信号:
import os
import signal
os.kill(<pid>, signal.SIGINT) #SIGINT is CTRL-C
您从 QProcess
对象获取 PID:
pid = self.process.processId()
编辑:在 Windows 上,将 SIGINT 替换为 CTRL_C_EVENT
【讨论】:
感谢您的回答。它适用于关闭进程,但是,保存数据需要一些时间(例如 2 秒)并且它会过快地终止进程。你知道有什么方法可以等到数据保存完成吗? 我让它工作了。我不得不将 SIGINT 更改为 CTRL_C_EVENT。感谢您的帮助!以上是关于如何使用 Ctrl+C 输入干净地退出 QProcess?的主要内容,如果未能解决你的问题,请参考以下文章
markdown 奇怪的是“git没有干净地退出(退出代码1)”