Node.js child_process spawnSync перехватывает ошибки из скрипта Python - PullRequest
0 голосов
/ 28 октября 2019

Я использую метод child_process spawnSync для запуска некоторых сценариев Python, все работает, но я пока не могу отловить ошибки, выдаваемые python в блоках try / catch, и было бы хорошо, если бы я мог также отлавливать ошибки, возникающие вручную из python.

Пример:

Node.js

try {
        const process =
          await spawn('python3', [ Helpers.resourcesPath('pythonScripts/main.py'),
            debug_mode,
            lang
          ], { input: '"' + front_img + '""' + back_img + '"' });

        const errorText = process.stderr.toString().trim();

        if (errorText) {
            return response.badRequest({
                message: errorText
            });
        } else {
            return response.success({
                message: process.stdout.toString().trim()
            });
        }
    } catch(e) {
        return response.badRequest()
    }

Python

try:

    ocr = tool.image_to_string(Image.fromarray(img))

    for key, words in languages.items():

        result = [x.strip() for x in words.split(',')]

        if any(x in ocr for x in result):
            languageDetected = key

            if languageDetected: break

    if languageDetected:
        return languageDetected
    else:
        # I want also to be able to get this as a error in node.js
        raise Exception('Language not detected')
        sys.exit(1)

except Exception as e:
    print(str(e))
    sys.exit()

В этом примере, если в коде python обнаружена ошибка в catch (e), он вернет ее в process.stdout вместо process.stderr, я хочу иметь возможность проверить, была ли ошибкавозвращен или хороший ответ в node.js.

Было бы хорошо, если бы я мог также поймать это исключение, выброшенное вручную в node.js

raise Exception('Language not detected')

1 Ответ

0 голосов
/ 28 октября 2019

child_process может прослушивать ошибки во время выполнения, попробуйте это:

const chid_proccess = require('child_process').spawn;


let main_spawn_process = chid_proccess('run some foo')

main_spawn_process.on('error', function(err) {
  console.log(err);
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...