В настоящее время я пытаюсь заставить библиотеку python работать на моем компьютере, но по какой-то причине способ написания выглядит некорректным.
Библиотека принимает два файла json в качестве входных данных, один из которых называется library.json
, в library.json
выполняется несколько проверок, которые выглядят следующим образом:
def name(self, n):
if n and isinstance(n, str):
if re.search(r'[^a-zA-Z0-9_.]+', n):
raise ValueError("Name can only contain alphanumeric characters, underscores and periods. Name is: {}".format(n))
if re.match(r'^\d', n):
raise ValueError("Name cannot start with a number. The name is: {}".format(n))
self._name = n
else:
raise ValueError('Name must be a non-empty string')
Я использую простой library.json
, извлеченный прямо из документации:
{
"word_launching_powershell": {"datetime_field": "datetime",
"weight": 10,
"indicators": [{"field": "process", "value": "powershell.exe"},
{"field": "parent_process", "value": "winword.exe"}]
}
}
И простой тестовый файл, снова взятый прямо из документации:
from electus import Electus
# Create some sample data
events = [{
"process": "winword.exe",
"parent_process": "explorer.exe",
"datetime": "2017-10-16T17:15:47.030114"
},
{"process": "powershell.exe",
"parent_process": "winword.exe",
"datetime": "2017-10-16T17:15:48.030123"
}]
# The library.json file stores the indicator definitions
# The combinations of indicators are defined in jobs.json
e = Electus(library_conf='library.json', job_conf='jobs.json')
for event in events:
alerts = e.evaluate_event(event)
if alerts:
print(alerts)
Итак, когда я запускаю этот тестовый скрипт, я получаю следующее:
Traceback (most recent call last):
File "test_config.py", line 16, in <module>
lib_def = LibraryDefinition(name='word_launching_powershell', definition=definition)
File "/home/user/.local/lib/python2.7/site-packages/electus/library.py", line 17, in __init__
self.name = name
File "/home/user/.local/lib/python2.7/site-packages/electus/library.py", line 47, in name
raise ValueError('Name must be a non-empty string')
ValueError: Name must be a non-empty string
Выполнение небольшой отладкиЯ вижу, что он умирает здесь:
n = {unicode}u'word_launching_powershell'
Так что это выглядит для меня проблемой кодирования, я не понимаю, почему вся библиотека будет написана с этими isinstance
проверяет, будут ли они всегда работать с файлами json?Есть ли способ исправить кодировку?