大佬教程收集整理的这篇文章主要介绍了从Node.js运行shell命令而不缓冲输出,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
节点似乎没有任何直接的方法来做到这一点。看起来像运行另一个进程的唯一方法是使用child_process,它总是将子进程的输入和输出重定向到管道。我可以编写代码接受来自这些管道的数据,并将其写入我的进程的STDOUT和STDERR,但如果我这样做,API迫使我牺牲一些灵活性。
我想要两个功能:
> SHell语法。我想能够在命令之间输出管道,或者运行Windows批处理文件。
>无限输出。如果我正在对编译器进行sHell操作,并且想要生成兆字节的编译器警告,我希望它们都能在屏幕上滚动(直到用户感到厌烦,并击中Ctrl C)。
看起来Node想强迫我在这两个特性之间进行选择。
>如果我想要无限量的输出,我可以使用child_process.spawn
然后做child.stdout.on(‘data’,function(data){process.stdout.write(data);});和stderr同样的事情,它会很高兴地管道数据,直到牛回家。不幸的是,spawn不支持sHell语法。
>如果我想要sHell语法,我可以使用child_process.exec
.但exec坚持缓冲子进程的STDOUT和STDERR为我,并给他们所有在结束,它限制了这些缓冲区的大小(可配置,默认200K) 。我仍然可以挂钩on(‘data’)事件,如果我想看到输出生成,但exec仍然会将数据添加到其缓冲区。当数据量超过预定义的缓冲区大小时,exec将终止子进程。
(还有child_process.execFile
,从灵活性的角度来看,这是两个世界中最糟糕的:没有sHell语法,但是你仍然需要限制你期望的输出量。)
我缺少什么?有没有什么办法只是外壳到Node中的子进程,而不是重定向其输入和输出?某些支持sHell语法,并且在预定义的输出量后不会崩溃,就像在sHell脚本,Ruby等中可用的?
var spawn = require('child_process').spawn; spawn('ls',[],{ stdio: 'inherit' });
使用sHell作为sHell语法 – 对于bash,它是-c参数从字符串中读取脚本:
var spawn = require('child_process').spawn; var sHellSyntaxCommand = 'ls -l | grep test | wc -c'; spawn('sh',['-c',sHellSyntaxCommand],{ stdio: 'inherit' });
总结:
var spawn = require('child_process').spawn; function shspawn(command) { spawn('sh',command],{ stdio: 'inherit' }); } shspawn('ls -l | grep test | wc -c');
以上是大佬教程为你收集整理的从Node.js运行shell命令而不缓冲输出全部内容,希望文章能够帮你解决从Node.js运行shell命令而不缓冲输出所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。