python 获取控制台被关闭事件和ctrl+c事件 脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 获取控制台被关闭事件和ctrl+c事件 脚本相关的知识,希望对你有一定的参考价值。

参考技术A import win32api
def on_close(sig):

win32api.SetConsoleCtrlHandler(on_close, True)

如何使用 Ctrl+C 输入干净地退出 QProcess?

【中文标题】如何使用 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。感谢您的帮助!

以上是关于python 获取控制台被关闭事件和ctrl+c事件 脚本的主要内容,如果未能解决你的问题,请参考以下文章

[No000090]C#捕获控制台(console)关闭事件及响应cmd快捷键

js 如何获取 ctrl+C和ctrl+v的事件?

js 如何获取 ctrl+C和ctrl+v的事件?

如何在 Powerpoint 2013 插件(用 C# 开发)中获取“ctrl c”或鼠标复制事件?

.Net Or .Net Core C# 控制台捕获关闭事件的代码

将 Ctrl+C 事件发送到在 Windows 上使用 QProcess 启动的进程