打印(写)Sikuli键常数

时间:2013-06-05 08:41:48

标签: python unicode constants jython sikuli

我的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个参数(只有用于键入和记录的键常量)。有可能吗?

2 个答案:

答案 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)
相关问题