2024-06-11 13:54:51 发布
网友
我正在开发一个需要调用python代码的electronjs应用程序。我需要在Python中读取循环每次迭代的输出,并以电子形式显示。 我该怎么做?在
我尝试过child_进程的方式,但它只在整个脚本结束时打印输出。我在python脚本中的每次迭代结束时显示一些内容。在
示例:
Python:
for i in range(5): print(i)
电子: --一些脚本--
期望输出: 1
aaa级
二
三
四
五
与this answer类似,您可能需要刷新输出,以便数据不会在某个缓冲区中延迟:
for i in range(5): print(i, flush=True)
但是,对于您给出的玩具示例,这对我的测试没有任何影响,因为5个值都是快速连续地打印出来的。在本例中,即使使用刷新,也可以一次性将所有值翻转过来。在
如果实际数据以较低的速率生成,则显式刷新可能已经是您的解决方案。以下示例为我生成了单独的读取事件:
如果在您的实际用例中,在同一事件中仍可能发生两条“消息”被翻转,并且您确实希望分别处理它们,那么您只需将输出(例如,逐行)拆分并分别处理每个消息。在
这要求输出是可拆分的。在玩具示例中,每个数字都打印在一个单独的行上,然后您可以调用^{},给您一个行列表。在
如何实现这一点在很大程度上取决于Python程序的实际输出。在
这是节点.js我用来测试的代码。它用script.py调用Python解释器(上面的代码示例就是这样)。Javascript代码输出stdout数据并跟踪数据事件的总数。在
script.py
const { spawn } = require('child_process') const myproc = spawn('python', ['script.py']) let counter = 0 myproc.stdout.on('data', data => { console.log(`stdout: ${data}`) counter++ }) myproc.on('close', () => { console.log(`child process exited after ${counter} read(s)`) })
与this answer类似,您可能需要刷新输出,以便数据不会在某个缓冲区中延迟:
但是,对于您给出的玩具示例,这对我的测试没有任何影响,因为5个值都是快速连续地打印出来的。在本例中,即使使用刷新,也可以一次性将所有值翻转过来。在
如果实际数据以较低的速率生成,则显式刷新可能已经是您的解决方案。以下示例为我生成了单独的读取事件:
^{pr2}$如果在您的实际用例中,在同一事件中仍可能发生两条“消息”被翻转,并且您确实希望分别处理它们,那么您只需将输出(例如,逐行)拆分并分别处理每个消息。在
这要求输出是可拆分的。在玩具示例中,每个数字都打印在一个单独的行上,然后您可以调用^{} ,给您一个行列表。在
如何实现这一点在很大程度上取决于Python程序的实际输出。在
这是节点.js我用来测试的代码。它用
script.py
调用Python解释器(上面的代码示例就是这样)。Javascript代码输出stdout数据并跟踪数据事件的总数。在相关问题 更多 >
编程相关推荐