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.system
或subprocess.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)
我想你的问题现在已经解决了。
我正在尝试编写一个 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.system
或subprocess.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)
我想你的问题现在已经解决了。