从命令获取对象,以便可以在条件逻辑

时间:2018-05-24 16:19:53

标签: python python-3.x

非常基本的问题和概念,我不知道答案。我正在使用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。

1 个答案:

答案 0 :(得分:1)

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

cd.scan('/tmp/EICAR')会返回dictionary。您可以通过键访问字典中的值。在这种情况下,密钥为/tmp/EICAR。该密钥的值为tuple。要访问元组的成员,您可以像使用数组一样进行访问 - 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]来访问'Eicar-Test-Signature'

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

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