解决win10下child_process.spawn|解决win10下child_process.spawn stdout返回值出错的问题
一开始的写法如下,跟网上部分网友的写法类似:
const ping = (ip) => {
return new Promise((resolve, reject) => {
console.log(`ping ${ip}...`)
let child = childProcess.spawn("ping",[ip]);
let str = "";
child.stdout.on("data", (data) => {
str += iconv.decode(data, encodings);
});
child.stdout.on("end",() => {
console.log(`ping ${ip} 已完成!!`)
return resolve(str);
});
});
}
一开始执行有resolve到正常返回值,
pkg打包后执行失败,再回去vscode调试也失败,
具体有几种情况,忘记具体改了什么出现了,
- resolve到ping IP地址 的命令本身,
- resolve到''空字符串,data 全程为'',
- 如下 spawn EPERM 错误,没有触发 data event
//ping 8.134.120.228...
//Uncaught Error Error: spawn EPERM ...
node
Welcome to Node.js v16.15.0.
Type ".help" for more information.
> ping 127.0.0.1
ping 127.0.0.1
^^^^^
Uncaught SyntaxError: Unexpected number
第一行把命令返回来了,
个人觉得是因为执行环境没有显式给出的原因,
看了网上一些相关文章,说显示使用cmd执行命令,
于是将spawn改为
let child = childProcess.spawn("cmd",["ping",ip]);
出现状况2,返回的data为空字符串,
在cmd 测试下
> cmd ping 127.0.0.1
Microsoft Windows [版本 10.0.19043.1526]
(c) Microsoft Corporation。保留所有权利。
跟直接执行cmd一样的,
再换powershell测试,有正确返回值
> powershell ping 127.0.0.1正在 Ping 127.0.0.1 具有 32 字节的数据:
【解决win10下child_process.spawn|解决win10下child_process.spawn stdout返回值出错的问题】再将spwan改为
let child = childProcess.spawn("powershell",["ping",ip]);
问题解决。
具体什么原因,我shell不太熟悉,加上公司环境的独特性,我分析不出来。
不过先记录下来避免重复踩坑。
推荐阅读
- Xilinx|Xilinx ISE系列教程(2)(LED点灯工程、仿真、bit下载和mcs固化)
- 做到以下三点,不用讨好领导,你照样可以升职加薪
- 打造自己的下拉刷新+上滑加载框架
- 投稿|宏观环境恶化叠加股价大幅下跌,FAANGs是否已经见顶?
- 解决Devc++运行窗口中文乱码的实现步骤
- 投稿|汤臣倍健:梁允超「强科技」豪言下,董莹半年花了13亿营销费
- 投稿|10万以下混动的空白,谁来填补?
- 投稿|分众传媒上半年拿了3.21亿财政补助,但净利润依然下降5成
- js|Windows 下安装 Bun(像 Node 或 Deno 一样的现代 JavaScript 运行时)
- BUG解决|笔记本电脑键盘没坏却无法打字的情况