【问题标题】:How To Read Python For Loop Outputs in Electron如何在 Electron 中读取 Python 的循环输出
【发布时间】:2019-10-25 21:14:39
【问题描述】:

我正在开发一个需要调用 python 代码的 electronjs 应用程序。我需要在 Python 中读取循环的每次迭代的输出并将其显示在 Electron 中。 我该怎么做?

我已经尝试过 child_process 方式,但只有在整个脚本结束时才会打印输出。我在 python 脚本中每次迭代结束时都会显示一些东西。

例子:

Python:

for i in range(5):
    print(i)

电子: --一些脚本--

python_process.on('stdout', function(data_returned){
console.log(data_returned);
console.log('aaa');
});

期望的输出: 1

啊啊

2

啊啊

3

啊啊

4

啊啊

5

啊啊

【问题讨论】:

标签: python node.js electron


【解决方案1】:

类似于this answer,您可能希望刷新输出,这样您的数据就不会停留在某个缓冲区中:

for i in range(5):
    print(i, flush=True)

但是,对于您提供的玩具示例,这对我的测试没有影响,因为这 5 个值无论如何都会快速连续打印。在这个例子中,即使是flush,所有的值都会一次性翻转。

如果您的实际数据以较低的速率生成,那么显式刷新可能已经是您的解决方案。以下示例为我生成了单独的读取事件:

import time
for i in range(5):
    print(i, flush=True)
    time.sleep(1)

如果在您的实际用例中,仍然可能会在同一事件中翻转两个“消息”并且您肯定希望分别处理它们,那么您只需拆分输出(例如逐行)并处理每条消息分开。

这要求您的输出是可拆分的。在玩具示例中,每个数字都打印在单独的行上,然后您可以调用splitlines,为您提供行列表。

如何实现这在很大程度上取决于 Python 程序的实际输出。


这是我用于测试的 Node.js 代码。它使用script.py 调用Python 解释器(这是上面的代码示例所在的位置)。 Javascript 代码输出标准输出数据并跟踪数据事件的总数。

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)`)
})

【讨论】:

  • 我使用socket.io从python脚本发出响应并在电子端读取它
  • 这会改变问题还是使答案无效?考虑将这些相关信息添加到问题中或提出新问题。
猜你喜欢
  • 1970-01-01
  • 2014-02-16
  • 2017-06-20
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
相关资源
最近更新 更多