我的Sikuli脚本使用Python模块日志记录所有操作。当我尝试将键入的键常量写入日志时,会出现问题。作为示例,我使用了打印功能,因为它也需要一个字符串:print((Key.ALT).encode('utf-8'))#exception not thrown but nothing readable is printedprint(Key.ALT) #UnicodeEncodeError: 'ascii' codec can't encode character u'\ue022' in position 0: ordinal not in range(128)当然,我可以将变量与所有可能的关键竞争者进行比较:myKey = Key.ALTif(myKey==Key.CTRL): print('ctrl pressed')elif(myKey==Key.ALT): print('alt pressed')#etc…但是我猜这不是最有效的方法。我还可以执行其他一些解决方法,如下所示:print(“Key.ALT pressed”)keyDown(Key.ALT)但是我想找到一种将Key.CONSTANT转换为可打印(可写)格式的方法,以便我的“ typing”功能仅接受1个参数(只有用于键入和记录的key常量)。可能吗?
2 回答
BIG阳
TA贡献1859条经验 获得超6个赞
您的if / else解决方案非常好。如果需要,可以改用字典:
keyStrings = { Key.CTRL : "control-key",
Key.ALT : "alt-key",
Key.SHIFT : "shift-key" }
print(keyStrings[myKey])
精慕HU
TA贡献1845条经验 获得超8个赞
我终于通过使用内置的python函数dir和getattr找到了令人满意的解决方案。无需一一定义所有值:
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)
添加回答
举报
0/150
提交
取消