0

我注意到,当我使用child_processspawn() 方法在 Node.js 中生成 python 脚本时,我无法捕获异常。

这是一个简单的例子来说明:

index.js:


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

(() => {
    const py = spawn('python', ['../pyfun/main.py']);

    py.stdout.on('data', function(data){
        console.log(data.toString());
    });

    py.stdout.on('end', function(){
        console.log('Finished');
    });

    py.stdout.on('error', function(){
        console.log('* Error');
    });

    py.on('error', (err) => {
        console.error('**', err);
    });

    py.stderr.on('error', (err) => {
        console.log('*** Error', error);
    })
})();

主要.py:

def main():
    print('Hello')
    raise ValueError('Python Error')

if __name__ == '__main__':
    main()

输出是

Hello // <-- from python

Finished // <-- from Node

我正在hello从 Python 脚本中获取,但我无法发现错误。如果我raise Exception('error')也在 python 脚本中使用,情况也是如此。

任何见解表示赞赏。

4

1 回答 1

1

添加一个处理程序py.on('exit', code => {}),如果代码不为零,则错误已转储到 stderr,您可以通过py.stderr.on('data', data => {})

于 2021-02-13T14:59:19.643 回答