最初的写法如下,和网上一些网友的写法类似:constping=(ip)=>{returnnewPromise((resolve,reject)=>{console.log(`ping${ip}...`)letchild=childProcess.spawn("ping",[ip]);letstr="";child.stdout.on("data",(data)=>{str+=iconv.decode(data,encodings);});child.stdout.on("end",()=>{console.log(`ping${ip}completed!!`)returnresolve(str);});});}在开始执行的时候,有resolve到正常的返回值。pkg打包后执行失败,然后vscode调试也失败。具体情况有几种。我忘了改了什么。自己pingIP地址的命令,解析为''一个空字符串,整个数据为'',下面spawnEPERM错误,没有触发数据事件//ping8.134.120.228...//UncaughtError错误:spawnEPERM...从第一种情况分析,发现结果和在node.exe环境下执行类似ping127.0.0.1ping127.0.0.1^^^^^UncaughtSyntaxError:Unexpectednumber第一行返回命令。个人认为是执行环境没有明确给出原因,在网上看了一些相关的文章,说cmd是用来执行命令的,所以把spawn改成letchild=childProcess.spawn("cmd",["ping",ip]);出现情况2,返回数据为空字符串,cmdtest>cmdping127.0.0.1MicrosoftWindows[Version10.0.19043.1526](c)MicrosoftCorporationAllRightsReserved。和直接执行cmd一样,然后改powershell测试,有正确的返回值>powershellping127.0.0.1是Ping127.0.0.1with32bytesofdata:然后改spwanletchild=childProcess.spawn("powershell",["ping",ip]);问题已经解决了。具体是什么原因,本人对shell不是很熟悉,再加上公司环境的特殊性,无法分析。不过先记录一下,以免重复坑。
