我想将散景服务器作为带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}`);
});
答案 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)