首页 > 解决方案 > 从命令获取对象,以便它可以在条件逻辑中使用

问题描述

非常基本的问题和概念,我不知道答案。我正在使用Clamd 1.0.2,在示例中它在使用 CLI 时显示以下内容:

>>> import clamd
>>> cd = clamd.ClamdUnixSocket()
>>> cd.ping()
'PONG'
>>> cd.version()                             # doctest: +ELLIPSIS
'ClamAV ...
>>> cd.reload()
'RELOADING'
>>> open('/tmp/EICAR','wb').write(clamd.EICAR)
>>> cd.scan('/tmp/EICAR')
{'/tmp/EICAR': ('FOUND', 'Eicar-Test-Signature')}

我希望能够获取对象cd.scan('/tmp/EICAR')创建并在条件下使用它。类似的东西:if FOUND then send email to administrator and notify the user

我只是不明白如何访问创建的对象。你如何访问它?使用 Python 3.6.5。

标签: pythonpython-3.x

解决方案


>>> cd.scan('/tmp/EICAR')
{'/tmp/EICAR': ('FOUND', 'Eicar-Test-Signature')}

cd.scan('/tmp/EICAR')返回字典。您可以通过键访问字典中的值。在这种情况下,关键是/tmp/EICAR。该键的值是一个元组。要访问元组的成员,您可以像使用数组 - 一样进行操作tuplename[index]

result = cd.scan('/tmp/EICAR')
if (result['tmp/EICAR'][0] == 'FOUND'):
    print("Send email")

同样,'Eicar-Test-Signature'这种情况下的值可以通过result['tmp/EICAR'][0]. cd.scan我不知道该函数的副作用是什么,但是您可以result完全绕过该变量并仅使用cd.scan('/tmp/EICAR')['/tmp/EICAR'][1]to 访问'Eicar-Test-Signature'.

请记住,如果cd.scan函数失败或返回的内容与您期望的不同,则密钥/tmp/EICAR可能不在字典中(我不知道clamd库是如何工作的或它是做什么的)。在这种情况下,您可以像这样检查字典中是否存在键:

if '/tmp/EICAR' in result:
    print('key is present')

推荐阅读