Node.js child_process spawnSync从python脚本捕获错误

问题描述 投票:0回答:1

我正在使用child_process spawnSync方法来运行一些python脚本,它全部正常工作,但到目前为止我无法在try / catch块中捕获python抛出的错误,如果我还可以捕获从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')

我正在使用child_process spawnSync方法来运行一些python脚本,它全部正常工作,但到目前为止我还无法捕捉到try / catch块中python抛出的错误,如果我也可以的话,那会很好...

python node.js child-process spawn
1个回答
0
投票

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);
}); 
© www.soinside.com 2019 - 2024. All rights reserved.