node.js执行脚本遇到的问题
发布于 10 年前 作者 modispy 5438 次浏览 最后一次编辑是 8 年前 来自 问答

具体是这样的,做了一个在网页执行后台脚本的东西,现在遇到的问题的是,后台脚本有些执行时间比较长,并且结果是一行行慢慢显示的,我现在想做的是在网页端也一行行显示???现在只实现了等待脚本执行完,后一次显示

我现在是用node.js实现的,执行脚本用的是chiild_process 中的exec,直接取其stdout当成结果,我要怎么一行一行通过exec去取结果哇

13 回复

另外我现在是用scoket.io去监听是否有消息,进行推送的,在exec执行的过程中,只能一步拿到所有结果,不能一行行实时地拿…

设计这样一个机制: 1、客户端产生一个随机数ID。 2、客户端准备好批量数据的持续接收处理事件: socket.on( 随机数ID_data, function(data){}); socket.on( 随机数ID_end, function(data){}) … 3、客户端 emit( 后台命令, 参数, 随机数ID) 4、服务器端执行命令,持续把数据发回给客户端 socket.emit( 随机数ID_data, 数据 ) 5、执行完毕,服务器端发送 socket.emit( 随机数ID_end, 数据 )

楼上~你这想法确实好,受教了,但是还有一个问题我后台用child_process exec函数去执行shell脚本,我只能通过stdout一次拿到所有的结果,不能刚输出一行结果就让socket.emit发送尼

@wenbob 楼上~你这想法确实好,受教了,但是还有一个问题我后台用child_process exec函数去执行shell脚本,我只能通过stdout一次拿到所有的结果,不能刚输出一行结果就让socket.emit发送尼

不知道这个能不能满足你的要求 procstreams

@littlehaker 貌似有点用,我研究研究…

@littlehaker 还是不行,这个只是,方便了各种shell命令运用,不能拆分这个执行过程,一行行拿到stdout的结果

我也有这个问题。这个是child_process exec的局限。

不知道你脚本文件的内容是什么?

使用pty.js,启动一个pty(伪终端窗口),把脚本里面的命令一个一个逐次执行,在data事件中处理每个命令的输出信息。

@leapon @wenbob@littlehaker 我现在准备这样,就是把脚本文件一行行读取,再一行行拿出来用child_process去执行,不知道这个到时脚本参数接收的时候会不会出问题 估计还得把$1直接换成传入的参数…各位觉得咋样

@modispy 如果脚本文件的每一行是独立的,你的方法还可行。好多脚本的行行间有逻辑关系,就不能用上述方法了。

@leapon 懂了还是不行…哎~

大兄弟,你现在有解决方法了么?来自三年后的问候

回到顶部