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