如何将Bokeh服务器(或任何子进程)的记录器重定向到Node中的文件?

时间:2018-01-18 13:13:31

标签: python node.js logging bokeh child-process

我想将散景服务器作为带Node的子进程运行。我想使用python_shell包并实时重定向输出,而不是在执行结束时。

Bokeh没有配置文件或参数,我可以在其中编写记录器文件路径。所以我需要使用command redirection operators来重新路由记录器:

'>> `${debug_path}` 2>&1'

所以我尝试了一些事情:

process.chdir(`${path}`);  // path where I should run bokeh

var options = {
mode: 'json',
pythonPath: `${python_path}`,
pythonOptions: [
        '-m', 'bokeh', 'serve',
    ],
    args: [
        '>>', `${debug_path}`, '2>&1',   // this is not working, in pythonOptions neither
    ]
};

python_shell.run('', options, function (err, results) {
    if (err) {
        logger.error(`${err}`);
    }
    // results is an array consisting of messages collected during execution
    if (typeof(results) !== 'undefined') {
        logger.info(results);  // this is run at the end of the execution if it was an script
    }
});

然后我想知道是否有办法用python_shell

重定向记录器

注意:我目前使用的是exec。但它有一些缺点,如果节点进程被强制杀死,python进程就变成了僵尸进程。所以这不是一个好的解决方案:

// command is a string with the whole paths and arguments concatenating '>> `${debug_path}` 2>&1' at the end
shell = child_process.exec(command, (error, stdout, stderr) => {
    if (error) {
        logger.error(`${error}`);
    }
    logger.info(`stdout: ${stdout}`);
    logger.info(`stderr: ${stderr}`);
});

1 个答案:

答案 0 :(得分:1)

Bokeh开发人员添加了一个直接重定向输出记录器的选项

> bokeh serve --help

[...]

--log-level LOG-LEVEL
                    One of: trace, debug, info, warning, error or critical
--log-format LOG-FORMAT
                    A standard Python logging format string (default:
                    '%(asctime)s %(message)s')
--log-file LOG-FILE   A filename to write logs to, or None to write to the
                    standard stream (default: None)