【问题标题】:Interval based display of Python Subprocess output executing nodejs code when there are no new lines in the output当输出中没有新行时,基于间隔显示 Python 子进程输出执行 nodejs 代码
【发布时间】:2018-10-27 22:02:13
【问题描述】:

我正在从 jupyter notebook 执行 Nodejs 脚本,并且 Nodejs 输出的输出未显示在 notebook 输出中。我通过stackoverflow找到了这个解决方案Constantly print Subprocess output while process is running。但是,这个解决方案只谈论加工线。 Nodejs 代码的编写方式是在处理文件时输出一个字符,例如“#”。它看起来像命令行上的进度条。由于没有换行符,因此在使用上面链接中的解决方案时,所有这些“#”符号都会累积,并在 Nodejs 代码执行完成后打印其中的一部分。我希望看到的是基于换行符和基于时间的输出的组合。

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

"##########"

"##########"

"##########"

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

"#######""###"

"#######""###"

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

或

"#######""###"

"####""######"

7 sec, 3 sec (因为遇到新行), 4 sec (结合之前的 3 sec 是 7 sec), 6 sec (因为遇到新行)......

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 根据github.com/pixiedust/pixiedust_node的说法,“Node.js进程的输出由pixiedust_node解析处理函数display/print/store/html/image的使用”。这基本上不包括我的用例。我不会删除这个答案,因为它可能对希望在 jupyter notebook 中运行 Node.js 的人有用。
    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多