Python可以用来向Mac发送一个真正的密钥关闭事件吗

Python可以用来向Mac发送一个真正的密钥关闭事件吗,python,macos,applescript,keypress,keydown,Python,Macos,Applescript,Keypress,Keydown,我的问题是,有没有办法用applescript/python在mac上可靠地按住键 我几乎在任何地方都搜索过这样的话题,但是,没有一个能切中要害。我试图使用Python从Arduino读取串行信息,然后将这些信号作为按键进行中继。我已经了解了如何使用applescript向系统事件发送“向下键”,如下代码所示: (Python code) def SendDown(key): string = str(key) cmd = """osascript -e 'tell ap

我的问题是,有没有办法用applescript/python在mac上可靠地按住键

我几乎在任何地方都搜索过这样的话题,但是,没有一个能切中要害。我试图使用Python从Arduino读取串行信息,然后将这些信号作为按键进行中继。我已经了解了如何使用applescript向系统事件发送“向下键”,如下代码所示:

(Python code)
    def SendDown(key):
    string = str(key)
    cmd = """osascript -e 'tell application "System Events" to key down (key code """ + string   + ")'"
    os.system(cmd)
这段代码可以正常工作,但是,我想控制谷歌飞行模拟器。当我尝试这样做时,按键似乎很快,飞行模拟器或基本的谷歌地球地图移动了我预期的一小部分

我使用此代码的方式基本如下(suedocode)

在我看来,我发送的按键按下事件本质上是一次快速的按键,并且按键没有被按下。我尝试直接在applescript中编程关键事件,并取得了一些成功。我的代码如下所示:

tell application "System Events"
    repeat 50 times    
        key down (key code 123)
    end repeat
    key up (key code 123)
end tell
这段代码移动谷歌地球地图的次数比我得到的要多,但花了很长时间才让它移动了一小部分(远远少于正常的箭头键)。然后,我尝试将applescript写入Python,但没有得到任何改进

所以我重申一个问题——有没有办法用applescript/python在mac上可靠地按下一个键

我可以很容易地在Windows上使用它,但是,我可以使用一个名为SendKeys的仅限Windows的库,它是为这样的应用程序设计的

任何帮助都将不胜感激

谢谢

杰克

使用。 试试下面的代码

import time

import pykeyboard


# TODO: Replace following two lines with the code that activate the application.
print('Activate the application 3 seconds.')
time.sleep(3)

k = pykeyboard.PyKeyboard()
k.press_key(k.left_key)
time.sleep(1) # Hold down left key for 1 second.
k.release_key(k.left_key)

不幸的是我没有苹果。我在Linux和Windows上进行了测试。

我认为这是个好名字。很好的建议Falstru,它在Mac上不起作用。显然pykeyboard只是Windows和Linux。(见)然而,我从他们那里得到了一个建议-,这可能在Mac上有效。所以你的建议不是徒劳的。谢谢。我一直在查看autopy,很多人都无法在Mac上安装,而且xcode也是必须下载的。我希望我的应用程序能够快速安装——因为xcode的容量接近2gb,这似乎不是很有用。希望有其他方法存在。@Jake,使用PyMouse(包含在PyUserInput中)怎么样。使用PyMouse需要一些计算,但不需要睡眠。@Jake,还有另一个选项:。它需要你安装Java。我非常喜欢Sikuli,它工作得很好,但是看起来有点笨重。我确实采纳了你关于在applescript中使用延迟的建议。事实证明,纯applescript工作正常。我相信发生的事情是,当我通过Python告诉applescript按下键时,因为在按下键之后,提示立即结束,我相信本质上,键向上是在按下键之后立即发送的。我相信通过python中的多线程,我可以实现一些运行一大块applescript的东西,这些东西实际上会延迟。我会很快发布完成的代码(如果可以的话)。谢谢你的帮助!
import time

import pykeyboard


# TODO: Replace following two lines with the code that activate the application.
print('Activate the application 3 seconds.')
time.sleep(3)

k = pykeyboard.PyKeyboard()
k.press_key(k.left_key)
time.sleep(1) # Hold down left key for 1 second.
k.release_key(k.left_key)