0

我的 Sikuli 脚本使用 Python 模块日志记录所有操作。当我尝试将键入的键常量写入日志时会出现问题。作为一个例子,我使用了print函数,因为它也需要一个字符串:

print((Key.ALT).encode('utf-8'))#exception not thrown but nothing readable is printed
print(Key.ALT)                  #UnicodeEncodeError: 'ascii' codec can't encode character u'\ue022' in position 0: ordinal not in range(128)

当然,我可以将变量与所有可能的关键内容进行比较:

myKey = Key.ALT
if(myKey==Key.CTRL):
    print('ctrl pressed')
elif(myKey==Key.ALT):
    print('alt pressed')
#etc…

但这不是我猜的最有效的方式。我还可以做一些其他的解决方法,比如:

print(“Key.ALT pressed”)
keyDown(Key.ALT)

但我想找到一种将Key.CONSTANT转换为可打印(可写)格式的方法,这样我的“打字”函数只需要一个参数(只有键常量用于打字和记录)。可能吗?

4

2 回答 2

1

您的 if/else 解决方案非常好。如果你愿意,你可以使用字典来代替:

keyStrings = { Key.CTRL  : "control-key",
               Key.ALT   : "alt-key",
               Key.SHIFT : "shift-key" }

print(keyStrings[myKey])
于 2013-06-06T19:26:58.543 回答
1

我终于通过使用内置 python 函数dirgetattr找到了令人满意的解决方案。无需一一定义所有值:

import re
#defining dictionary containing all possible Key values: 
keyDict = {}
for k in dir(Key):
    if(re.search("^__",k)):
        break
    else:
        keyDict[k] = getattr(Key,k)

#example of dictionary usage for comparison:
myKey = Key.TAB
for d in keyDict.keys():
    if(keyDict[d]==myKey):
        print("Found key = " + d)
于 2013-06-10T16:00:28.110 回答