当前位置: 首页 > 面试题库 >

Python跨平台监听按键?

滕星纬
2023-03-14
问题内容

我需要在python终端程序中监听某些按键,而不必使用暂停执行raw_input。我已经看到人们使用一些特定于Windows的方式来监听按键,并且我看到人们使用了诸如tkinter和pygame之类的大型模块,这些模块我想避免。

是否有一个轻量级的模块可以跨平台运行(至少是ubuntu,windows,mac)?还是有一种方法可以只使用来自tkinter,pygame等的事件系统

如果没有,我应该如何解决?我的第一个想法是将stdin重定向到另一个进程,并继续检查它是否包含我的事件键之一。

编辑

感谢@unutbu花时间标记这个已有3年历史的问题,并成功地作为另一个问题的重复回答,该问题的答案不适用于该问题,因为我特别询问了非阻塞解决方案。


问题答案:

我不知道任何跨平台的轻量级模块可以监听按键。但是,如果您想实现一些简单的操作,这里有个建议:

在Python常见问题解答中查看有关一次获得一次按键的问题。您可以尝试屏蔽来自sys.stdin和的读取threading。但这仅适用于Unix。在Windows上,您可以使用msvcrt.kbhit

结合Python FAQ和msvcrt模块中的按键配方,结果kbhit函数将如下所示:

try:
    from msvcrt import kbhit
except ImportError:
    import termios, fcntl, sys, os
    def kbhit():
        fd = sys.stdin.fileno()
        oldterm = termios.tcgetattr(fd)
        newattr = termios.tcgetattr(fd)
        newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
        termios.tcsetattr(fd, termios.TCSANOW, newattr)
        oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
        fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
        try:
            while True:
                try:
                    c = sys.stdin.read(1)
                    return True
                except IOError:
                    return False
        finally:
            termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
            fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)


 类似资料:
  • 多平台支持 Mpx支持在多个小程序平台中进行增强,目前支持的小程序平台包括微信,支付宝,百度,qq和头条,不过自2.0版本后,Mpx支持了以微信增强语法为base的跨平台输出,实现了一套业务源码在多端输出运行的能力,大大提升了多小程序平台业务的开发效率,详情可以查看template增强特性 不同平台上的模板增强指令按照平台的指令风格进行设计,文档和代码示例为了方便统一采用微信小程序下的书写方式。

  • 问题内容: 我正在使用以下代码在Linux / OSX上为Python库隐藏stderr,但我不控制默认情况下写入stderr的Python库: 是否有一个简单的跨平台替代/ dev / null?理想情况下,它不会消耗内存,因为这是一个长期运行的过程。 问题答案: os.devnull怎么样?

  • 我需要在我的应用程序中为不同的标签指定不同的FontFamily。我需要使用默认字体(如Android的Roboto和iOS的Helvetica)及其修改(如轻、中、粗)。据我所知,我应该使用Roboto-Light和Helvetica-Light来获得字体的轻版本(中号和粗体相同)。除了这个需求之外,我还需要在XAML中设置字体(如文档中所描述的),所以我最终得到了以下代码 然而,在Androi

  • 作为第三代数据统计和分析平台,诸葛实现了对用户的实名(实账号)分析,并主张互联网产品分析以用户为中心的分析思想并提供了一系列方法论。对用户的唯一标识来源于企业自身数据库对用户的唯一识别符,也即诸葛底层数据采集是以用户为中心的采集,我们提供了跨平台分析版本, 满足企业以用户为中心的整体的分析需求,不同平台相同业务价值下的用户完整的故事解读(例如:分析电商的用户在PC端浏览产品,在移动端支付的转化率)

  • 说明 由于在跨端开发中,必不可少的会遇到不同端需要有不同实现的情况。参考滴滴chameleon中的多态,megalo中实现了类似的跨平台兼容方案。需要使用时,请保证@megalo/target的版本号大于或等于0.7.2。 js的跨平台兼容 megalo中下面两种形式的引用会被特殊处理: [path-to-name]/[name]/index.mpjs [path-to-name]/[name]

  • 问题内容: 我想要具有与之相同的效果的东西: 但这也适用于Windows路径。我知道这里有一个,但是并不能满足我的要求,而且我也没有看到任何可以满足要求的东西。 问题答案: OP指定“也将适用于Windows路径”。Windows路径有一些折痕。 首先,Windows有多个驱动器的概念,每一个都有自己当前的工作目录,而往往是不一样的。因此,最好先使用os.path.splitdrive()分离出任