编码蟒蛇pyautogui中的反斜杠

时间:2016-03-16 15:38:42

标签: python string encoding pyautogui

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

pyautogui.typewrite('\\')

简单回归?

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

我的默认布局是德语,我无法改变它,因为由于错误的日期格式,这会扰乱程序的后期阶段。 任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

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

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

(1)您可以根据需要创建一个可以更改键盘布局的功能(具体来说,这是针对特定平台的),您甚至可以使用pyautogui命令执行此操作。

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

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

答案 1 :(得分:1)

好的,基于这个讨论,我终于找到了解决方法: 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

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

答案 2 :(得分:0)

问题(我认为)是你已经使用\'

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

答案 3 :(得分:0)

我遇到了同样的问题,但是我正在Linux上工作。对我来说,解决方案就是使用分隔线。

当我输入'cd / home / pi'时,'/'从不出现,解决方法是:

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

对我有用!