我的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 转换为可打印(可写)格式,以便我“打字” 函数只接受1个参数(只有用于键入和记录的键常量)。有可能吗?
答案 0 :(得分:1)
你的if / else解决方案完全没问题。如果你愿意,你可以改用字典:
keyStrings = { Key.CTRL : "control-key",
Key.ALT : "alt-key",
Key.SHIFT : "shift-key" }
print(keyStrings[myKey])
答案 1 :(得分:1)
我终于通过使用内置的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)