首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以从child_process.execFile生成的python脚本中获得“实时”输出行,而不需要每次都刷新标准输出?

有没有一种方法可以从child_process.execFile生成的python脚本中获得“实时”输出行,而不需要每次都刷新标准输出?
EN

Stack Overflow用户
提问于 2021-04-18 03:01:18
回答 2查看 182关注 0票数 2

我正在尝试将一个(‘永不结束’) python脚本放入stdout的代码行。但目前,我的代码仅在python进程退出时才会将某些内容记录到控制台。有没有一种方法可以逐行获得python脚本的“实时”输出?

spawn_child.js:

代码语言:javascript
复制
let execFile = require("child_process").execFile;

var child = execFile("python3", ["PATH_TO_FILE"]);

child.stdout.on("data", data=>{
    console.log(data.toString());
});
child.stderr.on("data", data=>{
    console.log(data.toString());
});
child.on("exit", code=>{
    console.log("Child exited with code "+code);
});

python文件:

代码语言:javascript
复制
from time import sleep

while True:
    sleep(3)
    print("test")

编辑:当使用nodejs脚本而不是python脚本时,它可以工作

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-18 03:42:38

将python脚本更改为

代码语言:javascript
复制
import time
import sys

while True:
    time.sleep(1)
    print("test")
    sys.stdout.flush()

并增加该子进程的缓冲区大小。

代码语言:javascript
复制
const child = execFile("python", ["./runner.py"], {
    detached: true,
    maxBuffer: 10 * 1024 * 1024 * 1024
});

或者,您可以不使用python-shell刷新到标准输出即可完成此操作

代码语言:javascript
复制
const { PythonShell } = require('python-shell');

let pyshell = new PythonShell('runner.py');
    
pyshell.on('message', function (message) {
    console.log(message);
});

pyshell.end(function (err, code, signal) {
    if (err) throw err;
    console.log('The exit code was: ' + code);
    console.log('The exit signal was: ' + signal);
    console.log('finished');
});
票数 2
EN

Stack Overflow用户

发布于 2021-04-18 03:48:28

使用spawn而不是execFile,不要忘记选项shellstdio

代码语言:javascript
复制
const spawn = require("child_process").spawn;

const child = spawn("python3", ["file.py"], {shell: true, stdio: 'inherit'});

child.on('data', function(data) {
    console.log(data);
});
  
child.on('close', function(code) {
    console.log('Child process exited with exit code '+code);
});

您还可以添加cwd选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67141936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档