打印(写入)Sikuli键常量

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


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转换为可打印(可写)格式的方法,以便我的“ typing”功能仅接受1个参数(只有用于键入和记录的key常量)。可能吗?


largeQ
浏览 194回答 2
2回答

BIG阳

您的if / else解决方案非常好。如果需要,可以改用字典:keyStrings = { Key.CTRL  : "control-key",               Key.ALT   : "alt-key",               Key.SHIFT : "shift-key" }print(keyStrings[myKey])

精慕HU

我终于通过使用内置的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.TABfor d in keyDict.keys():    if(keyDict[d]==myKey):        print("Found key = " + d)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python