当输出中没有新行时,基于间隔的Python子进程输出显示执行nodejs代码

时间:2018-10-27 22:02:13

标签: python node.js subprocess jupyter-notebook jupyter

我正在从jupyter笔记本执行Nodejs脚本,而Nodejs输出的输出未显示在笔记本输出中。我经历了stackoverflow,找到了此解决方案Constantly print Subprocess output while process is running。但是,此解决方案仅涉及处理线。编写Node.js代码的方式是在处理文件时它会输出诸如“#”之类的字符。它看起来像命令行上的进度条。由于没有换行符,因此使用上面链接中的解决方案时,所有这些“#”符号都会累积起来,并在完成Nodejs代码执行后打印出其中的一部分。我想看到的是基于换行符和基于时间的输出的组合。

例如,如果Nodejs处理了10个文档,则在命令行上我会实时看到十个#号(一次一个)。假设在处理了10个文档后,将打印新行(如下所示)。处理每个文件需要1秒钟。

“ ###########”

“ ###########”

“ ###########”

如果我将其基于时间的输出和基于换行符的输出进行组合。对于7秒的时间限制,我应该能够看到下面的输出。引号用于显示时间间隔。

“ #######”“ ###”

“ #######”“ ###”

7秒,3秒(因为遇到新行),然后是7秒.....

“ #######”“ ###”

“ ####”“ ######”

7秒,3秒(因为遇到了新行),4秒(与之前的3秒合并为7秒),6秒(因为遇到了新行)……

如果有人能提出更好的解决方案,使每个#的实时输出可以显示在控制台,python idle或jupyter notebook输出上,那将是完美的。

1 个答案:

答案 0 :(得分:0)

对此进行了一段时间的探讨,我发现了这篇文章https://medium.com/ibm-watson-data-lab/nodebooks-node-js-data-science-notebooks-aa140bea21ba。列出的“ pixiedust”和“ pixiedust_node” Python模块将确保nodejs代码在jupyter笔记本中运行。他们不仅可以在jupyter笔记本中执行nodejs代码,还可以让您使用本地python“ print”命令来打印输出。因此,我可以将我正在调用的nodejs代码包含在jupyter笔记本中,并且可以将“ process.stdout.write('#')”调用替换为“ print”,并获得与运行该命令时得到的结果相同的结果。命令行中的nodejs代码。我尚未对此进行全面测试,但我假设是“ process.stdout.write('#');”可能不需要将其替换为“ print”命令也可以正常工作。无论哪种方式,这都可以解决我的问题。完全测试之后,我将接受它作为答案。