为了账号安全,请及时绑定邮箱和手机立即绑定

打印(写入)Sikuli键常量

打印(写入)Sikuli键常量

largeQ 2021-03-23 17:14:57
我的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])


查看完整回答
反对 回复 2021-03-30
?
精慕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)


查看完整回答
反对 回复 2021-03-30
  • 2 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信