python pyautogui中反斜杠的编码

encoding of backslash in pythons pyautogui

我正在尝试编写一个 python 脚本,通过单击按钮自动运行外部程序,并使用 pyautogui 提供键盘输入(通常是文件路径)。 现在,如果我尝试使用 funktion pyautogui.typewriter(filepath) 它总是将反斜杠键入为问号。 这个最小的例子:

pyautogui.typewrite('\')

returns 简单吗?

现在,如果我将系统设置中的键盘布局更改为英语,它会正确 returns \

我的默认布局是德语,我真的无法更改它,因为错误的日期格式会扰乱程序的后期阶段。 有解决这个问题的想法吗?

问题(我认为)是您还用 \'

转义了引号

老实说,我不知道你需要多少个反斜杠(我从未使用过 pyautogui,但我认为这是一个 Python 问题,而不是包的问题),所以试试 '\\ ' 和 '\\' 和 '\\\'。除此之外,我认为您应该尝试寻找其他解决方案。

这本身不是编码问题。它与 pyautogui 如何发送键盘输入有关。它发送一个击键,至少在这种情况下,不考虑键盘布局(实际方法 pyautogui 用于此是特定于平台的。)

pyautogui 中没有内置的直接解决方案来指定键盘区域设置。所以,我看到了几个不同的选择...

(1) 您可以创建一个函数来根据需要更改您的键盘布局(确切的操作方式因平台而异)您甚至可以使用 pyautogui 命令来执行此操作。

(2) 不是为反斜杠提供输入 \,而是提供将在德语键盘上产生 \ 的输入。如有必要,您可以定义一个函数,该函数将接受一个字符串参数,该参数将该字符串中的问题字符转换为等效的 pyautogui 命令,从而在德语键盘上产生所需的输出。从一张德国键盘的图片来看,它实际上看起来像 \? 在同一个键上,所以你可能只需要添加像 shift 这样的修饰符(编辑:这里是 an example of someone doing this with a French keyboard 和 pyautogui

(3) 如果可能,考虑通过键盘输入以外的其他方法调用文件,例如os.systemsubprocess.call

好的,基于这个讨论,我终于有了一个解决方法: https://github.com/asweigart/pyautogui/issues/46

我在 _pyautogui_win.py 中进行了修改。并更改了“\”的键盘输入。 我使用这个方便的工具在键盘上获得了虚拟键码: http://www.delphiforfun.org/Programs/Utilities/KeyCodes.htm#Download 并将它们转换为十六进制代码。然后我通过添加以下内容更改了 _keyDown 函数:

if key == '\': 
        ctypes.windll.user32.keybd_event(0x11, 0, 0, 0) # should be left control
        ctypes.windll.user32.keybd_event(0x12, 0, 0, 0) # should be alt
        ctypes.windll.user32.keybd_event(0xDB, 0, 0, 0) # should be alt ß
        ctypes.windll.user32.keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)
        ctypes.windll.user32.keybd_event(0x12, 0, KEYEVENTF_KEYUP, 0)
        ctypes.windll.user32.keybd_event(0xDB, 0, KEYEVENTF_KEYUP, 0)
        return

现在一切正常。我认为这个解决方案可以应用于任何非英文键盘布局。

我遇到了同样的问题,但我正在处理 Linux。我的解决方案就是使用除法。

当我输入 'cd /home/pi' 时,“/”从未出现,解决方案是:

if key == '/':
    pyautogui.press('divide')

对我有用!

这看起来很难,但实际上很简单,你只需创建一个变量并在其中键入'\\',然后像这样在pyautogui中编写变量:

x = "\"
pyautogui.write(x)

我想你的问题现在已经解决了。