node.js - 如何在 node.js 的子生成过程中捕获 PowerShell 写入进度文本?
问题描述
例如,在 node.js 中,我创建了这样的子进程
child_process.spawn('powershell.exe', ['-executionpolicy', 'remotesigned', '-File', 'save_site_login_web.ps1', data.app_catalogue_url, data.ids.join(",")], { windowsHide:true });
const handler = (data) => {
// send data to client
};
watcher_shell.stdout.on('data', handler);
watcher_shell.stderr.on('data', handler);
但是,在子进程中,它会显示一个类似这张图片的进度条(我是通过从 powershell 终端手动运行它得到的)。顶部带有浅蓝色背景的区域是静态的并保持在顶部,而其中的文本会更新。
但是,此进度文本不会在 stdout 或 stderr 中捕获。如何在 node.js 中捕获此流?
谢谢
解决方案
正如mklement0 所说,进度流不能直接重定向。
话虽如此,从 Windows 1809+ 开始,有了新的伪控制台 (ConPTY) API,它基本上允许任何程序像控制台一样工作,从而捕获直接写入控制台的输出。
快速搜索一下,有一个node-pty模块,据说它在 Windows 上使用了 ConPTY API。我还没有尝试过,但它看起来很有希望(VS Code 正在将它用于其集成终端)。
推荐阅读
- swift - 如何将 [T] 数组传递给期望 UnsafeMutablePointer 的 C 函数
,我可以将返回的 C 数组转换回 swift 数组吗? - javascript - 将项目拖放到其他元素中
- java - AWS EC2 windows 用户注销关闭所有控制台程序
- unit-testing - 如何在使用 Molecule 的专用测试机内运行 ansible 角色后撤消更改
- python - Python:在数据框中添加条件列 - 如果日期位于另一个数据框中定义的多个期间中的任何一个
- pdf - 使用 Telerik DocumentProcessing 库将文本项添加到现有 PDF
- wordpress - 使用 Wordpress 拒绝用于 GDPR 的 Google Analytics cookie
- java - 找出从当前旋转到目标旋转所需的最小旋转
- spring - 为什么我们需要在spring security configure(HttpSecurity http)方法中调用http.addFilterBefore()方法?
- javascript - 如何有效地连接 Uint8Array?