Ошибка импорта Нет модуля с именем constant_time при доступе к серверу

Это продолжение модулей импорта в Nifi ExecuteScript

Я новичок в Python, а также нифи. Я пытаюсь выполнить свой скрипт на Python в процессоре ExecuteScript.

Я хочу получить доступ к серверу. поэтому я использовал клиент Paramiko. Но когда я запускаю процессор, он показывает "Ошибка импорта Нет модуля с именем constant_time" в строке session.write(). Хотя у меня есть это constant_time.py в "/usr/local/lib/python2.7/dist-packages/ "

У меня также есть путь "/usr/local/lib/python2.7/dist-packages/ " в sys.path. Я также дал этот путь в свойстве "Каталог модулей".

Это мой код:

import json, pysftp, paramiko
import java.io
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback

class ModJSON(StreamCallback):
  def __init__(self):
    pass
  def process(self, inputStream, outputStream):

    text = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
    inputText = text.rstrip('\r\n')
    json_content = json.loads(inputText)
    body = ''
    try:
       body = json_content['id']['body']
       body_encoded = body.encode('utf-8')
    except (KeyError,TypeError,ValueError):
       body_encoded = ''

    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.load_system_host_keys()
    ssh_client.connect('server', username='xxx', password='xxxx')

    sftp_client = ssh_client.open_sftp()
    text_file = sftp_client.open ('/doc/body.txt', 'w')   
    text_file.write("%s"%body_encoded)
    text_file.close()
    outputStream.write(bytearray(json.dumps(body, indent=4).encode('utf-8')))

flowFile = session.get()
if (flowFile != None):
   flowFile = session.write(flowFile, ModJSON())
   flowFile = session.putAttribute(flowFile, "filename", flowFile.getAttribute('filename').split('.')[0]+'_translated.json')
   session.transfer(flowFile, REL_SUCCESS)

Любая помощь будет оценена.

1 ответ

Как объяснил Мэтт Берджесс в этом ответе, ExecuteScript Процессор использует Jython, а не Python, поэтому скомпилированные модули недоступны. Продолжается обсуждение того, как / если добавить эту функцию.

Другие вопросы по тегам