繁体   English   中英

如何在电子中读取Python for Loop输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM