相关疑难解决方法(0)

Python从用户读取单个字符

有没有办法从用户输入读取一个单个字符?例如,他们在终端按一个键然后返回(有点像getch()).我知道Windows中有一个功能,但我想要一些跨平台的功能.

python input

242
推荐指数
14
解决办法
25万
查看次数

如何在Python中生成键盘事件?

简短的摘要:

我正在尝试创建一个程序,将键盘事件发送到计算机,为了所有目的,模拟事件应被视为键盘上的实际击键.

原帖:

我正在寻找一种使用python生成键盘事件的方法.

假设函数接收到必须模拟按下的键,如下所示:

keyboardevent('a') #lower case 'a'
keyboardevent('B') #upper case 'B'
keyboardevent('->') # right arrow key

def keyboardevent(key):
    #code that simulated 'key' being pressed on keyboard
Run Code Online (Sandbox Code Playgroud)

以上显然是示例,但我正在寻找的是库,模块或其他,我可以用它来模拟键盘事件.

注意:这与将字符发送到记事本,或将文本输入字段等不同.我希望python脚本模拟一个实际的键盘事件,计算机会认为确实存在键盘事件.

额外注意:

我不想将键击发送到活动窗口 - 我希望系统能够相信键盘的按键被按下,微妙的区别,因为一些活动窗口不接受某些键组合,或者我想使用键盘快捷键对于通过我的脚本的后台进程,他们不需要通过活动窗口

到目前为止,我已经看过这些事情:

为最前面的应用程序生成键盘事件

如何通过Python生成键盘按键事件?

这些都是关于苹果的,并没有任何帮助.

还有这个:

哪种在Python上模拟键盘和鼠标的最简单方法?

这似乎可能是我需要的,但我找不到它的库或任何文档.

我也搜索了更多的地方,但还没有找到解决方案.

python keyboard-events

75
推荐指数
5
解决办法
16万
查看次数

我在哪里可以找到Mac虚拟密钥代码列表?

我正在使用CGEventCreateKeyboardEvent并需要知道CGKeyCode要使用的值.

具体来说,我是关键的密钥代码Command.文档提供了其他键的示例:zis 6,shiftis 56.

某处必须有Mac虚拟键码列表?

keyboard macos keycode quartz-graphics cgkeycode

71
推荐指数
5
解决办法
10万
查看次数

在python中检测按键?

我在python中制作秒表类型程序,我想知道如何检测是否按下了一个键(例如p表示暂停,s表示停止),我不希望它像raw_input那样等待用户在继续执行之前的输入.任何人都知道如何在while循环中执行此操作?

另外,我想制作这个跨平台,但如果不可能,那么我的主要开发目标是linux

python keypress detect python-2.7

64
推荐指数
10
解决办法
24万
查看次数

如何使用Python在Mac中控制鼠标?

在OS X上使用Python移动鼠标(并可能单击)的最简单方法是什么?

这仅适用于快速原型设计,它不一定非常优雅.

python macos mouse

29
推荐指数
6
解决办法
3万
查看次数

如何在python中完成密码输入,并为用户的每个字符打印星号?

据我所知,此问题之前已被提出,但仍然缺乏答案.所以我再次提出这个问题,以便最终得到这个问题的答案.(如果我错了,请给我答案的网址.)

问题:程序员希望用户输入密码.在将getpass()函数就是为了这个目的很好,但它的使用有一个缺点:当输入密码没有打印到标准输出.

问题:如何在为用户键入的每个字符打印星号时实现getpass()?(当然,退格 -甚至是POS1结束 -应采取相应的照顾.)

动机:社区中有人不理解为什么要问这个问题.然后用a)引用getpass(),这样忽略了手头的任务,b)没有考虑那个引用不会回答问题.之所以可能希望打印星号是为了方便用户:他们在密码输入期间获得直接的视觉响应.因此,他们不会因按键而感到困惑,而且 - 在那里 - 似乎没有任何事情发生.

迈向解决方案的一步:

让我在这里向解决方案迈出第一步.请帮忙,以便将其演变成真正的解决方案.

有一个名为getch的模块似乎允许从stdin逐字符读取.Backspace非常奇怪地映射到127的整数值,但是这样的解决方案可能如下所示:

def readLineWithAsterisks():
    sBuffer = ''
    while True:
        c = getch.getch()
        if c == '\n':
            return sBuffer
        elif ord(c) == 127:
            if len(sBuffer) > 0:
                sys.stdout.write('\x08 \x08')
                sys.stdout.flush()
                sBuffer = sBuffer[0:-1]
            continue
        else:
            sys.stdout.write('*')
            sys.stdout.flush()
            sBuffer += c
Run Code Online (Sandbox Code Playgroud)

但是这段代码有一些缺点.首先,我非常困惑c如果进入退格,则不是'\ b' .也许这样有解释?仅处理第二个ASCII字符,至少在Linux上是这样.我在这里不了解Windows,但如果按下A-Z0-9以外的字符,则行c = getch.getch()将抛出异常. …

python security passwords console command-line

22
推荐指数
2
解决办法
6270
查看次数

缩短用户输入的睡眠时间

我试图找到一种方法来缩短 atime.sleep(600)如果用户输入一个键,而不诉诸于一些丑陋的黑客:

key_pressed = False
for i in range(600):
    key_pressed = key_was_pressed()
    if not key_pressed:
        time.sleep(1)
    else:
        break
Run Code Online (Sandbox Code Playgroud)

python

11
推荐指数
1
解决办法
266
查看次数

Python中的键回显在单独的线程中不显示第一个键击

我会尝试发布一个最小的工作示例,但不幸的是这个问题只需要很多部分,所以我尽可能地将其剥离.

首先,我使用一个简单的脚本来模拟通过函数调用按键.这是从这里调整的.

import ctypes

SendInput = ctypes.windll.user32.SendInput

PUL = ctypes.POINTER(ctypes.c_ulong)

class KeyBdInput(ctypes.Structure):
    _fields_ = [("wVk", ctypes.c_ushort),
                ("wScan", ctypes.c_ushort),
                ("dwFlags", ctypes.c_ulong),
                ("time", ctypes.c_ulong),
                ("dwExtraInfo", PUL)]

class HardwareInput(ctypes.Structure):
    _fields_ = [("uMsg", ctypes.c_ulong),
                ("wParamL", ctypes.c_short),
                ("wParamH", ctypes.c_ushort)]

class MouseInput(ctypes.Structure):
    _fields_ = [("dx", ctypes.c_long),
                ("dy", ctypes.c_long),
                ("mouseData", ctypes.c_ulong),
                ("dwFlags", ctypes.c_ulong),
                ("time",ctypes.c_ulong),
                ("dwExtraInfo", PUL)]

class Input_I(ctypes.Union):
    _fields_ = [("ki", KeyBdInput),
                 ("mi", MouseInput),
                 ("hi", HardwareInput)]

class Input(ctypes.Structure):
    _fields_ = [("type", ctypes.c_ulong),
                ("ii", Input_I)]

def getKeyCode(unicodeKey):
    k = unicodeKey
    curKeyCode = 0
    if k == …
Run Code Online (Sandbox Code Playgroud)

python windows keyboard multithreading python-multithreading

6
推荐指数
1
解决办法
407
查看次数

Python Windows`msvcrt.getch()`仅检测每个第三个按键?

我的代码如下:

import msvcrt
while True:
    if msvcrt.getch() == 'q':    
       print "Q was pressed"
    elif msvcrt.getch() == 'x':    
       sys.exit()
    else:
       print "Key Pressed:" + str(msvcrt.getch()
Run Code Online (Sandbox Code Playgroud)

此代码基于此问题 ; 我用它来熟悉自己getch.

我注意到按3次键需要3次输出文本一次.为什么是这样?我正在尝试将它用作事件循环,这太过于滞后......

即使我键入3个不同的键,它也只输出第3个按键.

我怎么能强迫它走得更快?有没有更好的方法来实现我想要实现的目标?

谢谢!

evamvid

python msvcrt getch event-loop python-2.7

4
推荐指数
1
解决办法
2万
查看次数

detect key press in python, where each iteration can take more than a couple of seconds?

Edit: The below answer to use keyboard.on_press(callback, suppress=False) works fine in ubuntu without any issues. But in Redhat/Amazon linux, it fails to work.

I have used the code snippet from this thread

import keyboard  # using module keyboard
while True:  # making a loop
    try:  # used try so that if user pressed other than the given key error will not be shown
        if keyboard.is_pressed('q'):  # if key 'q' is pressed 
            print('You Pressed A Key!')
            break  # finishing the …
Run Code Online (Sandbox Code Playgroud)

python redhat keypress python-3.x amazon-linux

4
推荐指数
2
解决办法
3434
查看次数

通过python中的键盘输入中断循环

我在按一个键跳出循环时遇到问题。

我用谷歌搜索并找到了msvcrt 模块,但它没有解决我的问题。

这是我的代码。

while True:
    """some code"""
    if *keyboard_input: space* == True:
        break
Run Code Online (Sandbox Code Playgroud)

我知道这是一个简单的问题,但我就是找不到要导入的正确模块。

谢谢!

python python-2.7

2
推荐指数
1
解决办法
2万
查看次数