按下时,如何在Python中捕获Ctrl键(只有Ctrl键,同时没有其他键)?

时间:2015-07-07 10:21:06

标签: python

我需要在python控制台(文本模式)程序中检测到按下 Ctrl 键时,同时没有其他键。我尝试使用curses库和stdin中的getch,但它等待任何键但不是 Ctrl Alt 。我在stackoverflow中找到了信息,但总是引用Windows /事件环境,或者与另一个键同时按下(例如 Ctrl + C ),但这不是我的情况。我在一些论坛上发现这是不可能的,但我可以相信。

1 个答案:

答案 0 :(得分:1)

这个答案是以Linux为中心的,看到你提到Raspbian控制台模式意味着Debian GNU / Linux控制台系统。

如果你真的在谈论控制台,这可能是非常黑客的。 Curses有一个原始模式来读取大多数键,但是Control是一个修饰键,因此不会以这种方式显示。我能想到的方法是读取输入设备,就像X一样。使用<?php $SO_ID=$_POST['so']; $Status=$_POST['status']; require_once 'Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->getActiveSheet()->setCellValue('A1', $SO_ID); $objPHPExcel->getActiveSheet()->setCellValue('B1', $Status); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save("/var/www/html/apps/asheet.xlsx"); 查找键盘中的设备。正如输入事件所示,您可以在其他地方处理事件时查看事件。缺点是您不知道输入是否实际上是您的(除非您跟踪虚拟控制台切换,作业状态等)并且您需要访问该设备,因为该属性意味着它可能是敏感数据,如作为输入密码登录另一个虚拟控制台。

重新映射控件键本身使用lsinput发送的内容可能更简单,从而将其从修饰符更改为可检测键。它仍将保留其较低级别的协议属性(例如,在USB HID引导协议键盘中,它将具有专用位而不是通常仅使用6个插槽用于按下的键)。

无论哪种方式,这都不容易或不便携,并且无法在终端环境(例如ssh会话)中工作。