[英]How To Read Python For Loop Outputs in Electron
我正在开发一个需要调用python代码的electronjs应用程序。 我需要在Python中读取循环的每次迭代的输出并将其显示在Electron中。 我怎样才能做到这一点?
我尝试了child_process方法,但只在整个脚本结束时打印输出。 我在python脚本的每次迭代结束时都会显示一些东西。
例:
蟒蛇:
for i in range(5):
print(i)
电子: - 一些脚本 -
python_process.on('stdout', function(data_returned){
console.log(data_returned);
console.log('aaa');
});
期望的输出:1
AAA
2
AAA
3
AAA
4
AAA
五
AAA
与此答案类似,您可能希望刷新输出,以便您的数据不会在某个缓冲区中延迟:
for i in range(5):
print(i, flush=True)
但是,对于你给出的玩具示例,这对我的测试没有影响,因为无论如何都要快速连续打印5个值。 在此示例中,即使使用刷新,也可以一次性翻转所有值。
如果您的实际数据是以较低的速率生成的,那么显式刷新可能已经是您的解决方案。 以下示例为我生成单独的读取事件:
import time
for i in range(5):
print(i, flush=True)
time.sleep(1)
如果在您的实际用例中仍然可能发生两个“消息”在同一事件中被翻转并且您肯定想要单独处理它们,那么您只需要分割输出(例如逐行)并分别处理每个消息。
这要求您的输出可以拆分。 在玩具示例中,每个号码被印刷在一个单独的行,然后就可以调用splitlines
,给你行的列表。
如何实现这很大程度上取决于Python程序的实际输出。
这是我用于测试的Node.js代码。 它使用script.py
调用Python解释器(这是上面的代码示例所在的位置)。 Javascript代码输出stdout数据并跟踪数据事件的总数。
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)`)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.