首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我似乎不知道如何获得一个进程的输出,而这个进程是用spawn触发的。stdout.on('data')不为我输出

要获得一个进程的输出,可以使用Node.js的child_process模块中的spawn方法来触发进程,并通过监听stdout事件来获取输出。

spawn方法会返回一个ChildProcess对象,可以通过该对象的stdout属性来访问进程的标准输出流。要获取输出,可以使用stdout对象的on('data')事件监听器。

以下是一个示例代码,演示如何获取一个进程的输出:

代码语言:txt
复制
const { spawn } = require('child_process');

// 用spawn触发一个进程
const childProcess = spawn('command', ['arg1', 'arg2']);

// 监听stdout事件,获取输出
childProcess.stdout.on('data', (data) => {
  console.log(`进程输出:${data}`);
});

// 监听进程结束事件
childProcess.on('close', (code) => {
  console.log(`进程退出,退出码:${code}`);
});

在上述代码中,command是要执行的命令,arg1arg2是命令的参数。通过spawn方法触发进程后,可以通过监听stdout事件来获取进程的输出。每当有数据输出时,data参数会传递给回调函数。

需要注意的是,stdout事件可能会被触发多次,因此需要根据实际情况来处理输出数据。另外,还可以监听close事件来获取进程的退出码。

对于腾讯云相关产品,可以使用腾讯云的云服务器(CVM)来运行进程,并通过腾讯云的云监控服务来监控进程的输出和状态。具体的产品介绍和链接地址可以参考腾讯云官方文档或官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入了解 Node 的多进程服务

提供了一个回调函数,通过这个回调函数可以获得子进程的标准输出/错误流。...5.2 execFile 和 spawn 在子进程的信息交互方面,spawn使用了流式处理的方式,当子进程产生数据时,主进程可以通过监听事件来获取消息;而exec是将所有返回的信息放在stdout里面一次性返回的...,也就是该方法的maxBuffer参数,当子进程的输出超过这个大小时,会产生一个错误。...通常情况下,如果多个 Node 进程监听同一个端口时会出现Error: listen EADDRINUS的错误,而Cluster模块能够让多个子进程监听同一个端口的原因是master进程内部启动了一个...TCP 服务器,而真正监听端口的只有这个服务器,当来自前端的请求触发服务器的connection事件后,master会将对应的socket句柄发送给子进程。

76420
  • Nodejs进阶:如何玩转子进程(child_process)

    maxBuffer: 标准输出、错误输出最大允许的数据量(单位为字节),如果超出的话,子进程就会被杀死。...各种事件 close 当stdio流关闭时触发。这个事件跟exit不同,因为多个进程可以共享同个stdio流。...这两者中,一者肯定不为null。 注意事项:exit事件触发时,子进程的stdio stream可能还打开着。(场景?)...error 当发生下列事情时,error就会被触发。当error触发时,exit可能触发,也可能不触发。(内心是崩溃的) 无法创建子进程。 进程无法kill。...代表是否能够从子进程接收消息,或者对子进程发送消息。 .disconnect():关闭父进程、子进程之间的IPC通道。当这个方法被调用时,disconnect事件就会触发。

    4.3K80

    Node.js开发多进程应用

    ; process.stdin.on('end', function(data) { process.exit() }); 如果子进程开启失败将会触发error事件,可以在这个error事件的回调函数中指定处理方式...方法运行的是一个命令进程,也就意味着不仅运行node命令了。...使用exec方法 exec方法用于运行某个命令的子进程并缓存子进程的输出结果,这个方法很像spawn方法,区别在于spawn方法是对子进程的输入输出实时接收,而exec必须等到子进程的输出数据全部缓存成功才能接收数据...,直观上的表现就是spawn方法异步,而exec方法同步。...timeout属性,这个属性用于指定子进程的超时时间,单位是毫秒,当子进程运行时间超过该时间时,将强制关闭该子进程,默认值为0,即不限定时间,callback则为终止子进程触发的回调函数。

    1.5K20

    字节前端架构组工程化代码片段

    如何使用交互式的命令行工具下载项目模板 这部分代码实现了一个用户交互的 GitHub 模板下载工具。首先你需要在github上创建一个项目,然后使用下面介绍的代码就可以用命令行拉取到本地,并解压了。...execQuick 函数,它使用 spawn 子进程的方式执行一条命令。...spawn 子进程的优点是比 exec 更高效,因为它不需要创建新的 shell 环境,并且不会因超出最大缓冲区的限制而导致错误。...这个函数可以接受多个参数,并且支持字符串、字符串数组、对象等多种参数类型。在合并字符串时,会自动去除重复的字符串,并将所有字符串用空格隔开。..., }, }; } dispatch(0); } 命令行工具如何显示loading动画 我们封装了在命令行工具中常用ora这个库,ora 是一个 JavaScript

    17220

    Nodejs进阶:如何玩转子进程(child_process)

    maxBuffer: 标准输出、错误输出最大允许的数据量(单位为字节),如果超出的话,子进程就会被杀死。...各种事件 close 当stdio流关闭时触发。这个事件跟exit不同,因为多个进程可以共享同个stdio流。...这两者中,一者肯定不为null。 注意事项:exit事件触发时,子进程的stdio stream可能还打开着。(场景?)...error 当发生下列事情时,error就会被触发。当error触发时,exit可能触发,也可能不触发。(内心是崩溃的) 无法创建子进程。 进程无法kill。...代表是否能够从子进程接收消息,或者对子进程发送消息。 .disconnect():关闭父进程、子进程之间的IPC通道。当这个方法被调用时,disconnect事件就会触发。

    3.3K50

    Linux fork那些隐藏的开销

    我下面的demo也将全部基于Linux。 fork的开销 一提到这个话题,标准的答案似乎都是 不要用进程,因为进程创建的开销太大了,尽量用线程。 ......和上一节讲页表的开销一样,这个vm_area_struct对象的开销也是转瞬即逝的,很难捕获到,无论如何这个开销是没有必要的,根因还是一样,fork中的全面复制是没有必要的!...taskstruct获得了一把锁,那么虽然调用fork的taskstruct并不知道这件事(它要lock一下才知道),但是这个事实还是会悄无声息地传给子进程,子进程如果此时去拿锁,就会死锁,它哪知道自己已经持有锁了啊...确实,clone如果用对了,用它来exec一个 进程(注意,就是进程,而不是线程) 的开销远小于fork!怎么说呢? 其实,只要知道exec的原理就可以了。...之所以利用clone来创建一个共享地址空间的进程而不是线程,背后的逻辑是该子进程马上就会调用exec,而exec中,子进程将新建地址空间,从而与父进程的地址空间脱离。

    5K50

    字节前端架构组工程化代码片段

    如何使用交互式的命令行工具下载项目模板 这部分代码实现了一个用户交互的 GitHub 模板下载工具。首先你需要在github上创建一个项目,然后使用下面介绍的代码就可以用命令行拉取到本地,并解压了。...execQuick 函数,它使用 spawn 子进程的方式执行一条命令。...spawn 子进程的优点是比 exec 更高效,因为它不需要创建新的 shell 环境,并且不会因超出最大缓冲区的限制而导致错误。...这个函数可以接受多个参数,并且支持字符串、字符串数组、对象等多种参数类型。在合并字符串时,会自动去除重复的字符串,并将所有字符串用空格隔开。..., }, }; } dispatch(0); } 命令行工具如何显示loading动画 我们封装了在命令行工具中常用ora这个库,ora 是一个 JavaScript

    18840

    字节前端架构组工程化代码片段

    如何使用交互式的命令行工具下载项目模板 这部分代码实现了一个用户交互的 GitHub 模板下载工具。首先你需要在github上创建一个项目,然后使用下面介绍的代码就可以用命令行拉取到本地,并解压了。...execQuick 函数,它使用 spawn 子进程的方式执行一条命令。...spawn 子进程的优点是比 exec 更高效,因为它不需要创建新的 shell 环境,并且不会因超出最大缓冲区的限制而导致错误。...这个函数可以接受多个参数,并且支持字符串、字符串数组、对象等多种参数类型。在合并字符串时,会自动去除重复的字符串,并将所有字符串用空格隔开。..., }, }; } dispatch(0); } 命令行工具如何显示loading动画 我们封装了在命令行工具中常用ora这个库,ora 是一个 JavaScript

    18410

    Nodejs进程间通信

    流(标准输入输出流)关闭时触发 message:子进程通过process.send()发送消息时触发,父子进程之间可以通过这种内置的消息机制通信 可以通过child.stdin,child.stdout...()的IPC选项的详细信息,请查看options.stdio exec spawn()方法默认不会创建shell去执行传入的命令(所以性能上稍微好一点),而exec()方法会创建一个shell。...和stderr),所以上例能够通过监听当前进程process.stdout的data事件拿到子进程的输出结果 另外,除了stdio和shell选项,spawn()还支持一些其它选项,如: const child...(); 以这种方式创建的独立进程行为取决于操作系统,Windows上detached子进程将拥有自己的console窗口,而Linux上该进程会创建新的process group(这个特性可以用来管理子进程族...,跨进程的能力取决于MQ支持 即进程间不直接通信,而是通过中间层(MQ),加一个控制层就能获得更多灵活性和优势: 稳定性:消息机制提供了强大的稳定性保证,比如确认送达(消息回执ACK),失败重发/防止多发等等

    3.2K30

    在nodejs中创建child process

    注意,worker_threads创建的是子线程,而child_process创建的是子进程。 在child_process模块中,可以同步创建进程也可以异步创建进程。...同步创建方式只是在异步创建的方法后面加上Sync。 创建出来的进程用ChildProcess类来表示。...注意,close事件和exit事件是不同的,因为多个进程可能共享同一个stdio,所以发送exit事件并不一定会触发close事件。...是基础,他会异步的生成一个新的进程,其他的fork,exec和execFile都是基于spawn来生成的。...他们的区别就在于在windows的环境中,如果要执行.bat或者.cmd文件,没有shell终端是执行不了的。这个时候就只能以exec来启动。execFile是无法执行的。

    3.3K30

    在nodejs中创建child process

    注意,worker_threads创建的是子线程,而child_process创建的是子进程。 在child_process模块中,可以同步创建进程也可以异步创建进程。...同步创建方式只是在异步创建的方法后面加上Sync。 创建出来的进程用ChildProcess类来表示。...注意,close事件和exit事件是不同的,因为多个进程可能共享同一个stdio,所以发送exit事件并不一定会触发close事件。...是基础,他会异步的生成一个新的进程,其他的fork,exec和execFile都是基于spawn来生成的。...他们的区别就在于在windows的环境中,如果要执行.bat或者.cmd文件,没有shell终端是执行不了的。这个时候就只能以exec来启动。execFile是无法执行的。

    3.6K31

    可以浏览器页面运行 node 代码里了!webContainer 发布 1.0

    它提供一个比本地环境更快、更安全、更一致的卓越开发环境,以实现无缝代码协作,而无需设置本地环境,这个目标似乎离 Web 开发人员越来越近了。...我的理解,webContainer 就是一个可以运行在浏览器页面中的微型操作系统,提供了文件系统、运行进程的能力,同时内置了 nodejs、npm/yarn/pnpm 等包管理器。...= await webcontainerInstance.spawn('npm', ['install']); return installProcess.exit;}读取进程的输出调用 Spawn...它的 output 属性是一个可读流 readableStream ,它接收所有的输出,包括 stdout and stderr,下面代码可已经进程的输出,打印出来const installProcess...如果这篇文章对您有所帮助,可以点赞加收藏,您的鼓励是我创作路上的最大的动力。也可以关注我的公众号订阅后续的文章:Candy 的修仙秘籍(点击可跳转)图片

    88020

    多任务之多进程和协程实现

    多线程是在一个进程里写多个线程,而多进程是多个进程里每个进程都运行一个主线程,进程多了,主线程也就多了,也就实现了多任务。通俗点相当于一个苹果2个人分,和再拿一个苹果,一人一个。...2、使用都有自己优缺点,线程执行占用资源少,不利于资源管理和保护,同理进程相反 3、进程拥有独立的内存单元,多线程共享内存。 进程间如何传递值 上面说了,多进程是独立的内存,那怎么办?...(用全局变量不行) 可以通过进程间的通讯来解决,比如socket。也可以用文件储存,一个存一个取。 但是这里不用上面的方法,我们用Queue队列(数据特性:先进先出。栈:刚好相反,先进后出)。...('我是第一个') # 查看队列是否存满 是返回True,不是返回False print(q.full()) q.put('我是第二个') # 判断队列是否为空,是返回True,不是返回False print...time.sleep(0.5) g1 = gevent.spawn(fun1,10) g2 = gevent.spawn(fun2,10) g1.join() g2.join() 如果我创建的多任务比较多

    86240

    理解NodeJS多进程

    序言一次面试中,我提到自己用过pm2,面试接着问:「那你知道pm2父子进程通信方式吗」。我大概听说pm2有cluster模式,但不清楚父子进程如何通信。面试结束后把NodeJS的多进程重新整理了一下。...进程必然要支持后台执行(守护进程),这个又怎么实现呢?进程崩溃如何重启?重启过于频繁的不稳定进程又如何限制?如何操作进程的启动、停止、重启?这一系列的进程管理工作都有相关的工具支持。...shell,并在shell上执行命令;spawn会在父子进程间建立IO流stdin、stdout、stderr;spawn返回一个子进程的引用,通过这个引用可以监听子进程状态,并接收子进程的输入流。...的是一个文件描述符,而不是端口,相应的,client连接的也是一个文件描述符(path)。...管道本质上就是内核中的一个缓存,当进程创建一个管道后,Linux会返回两个文件描述符,一个是写入端的描述符(fd1),一个是输出端的描述符(fd0),可以通过这两个描述符往管道写入或者读取数据。

    1.2K00

    FastCGI的认识与使用

    大家好,又见面了,我是你们的朋友全栈君。 01....CGI独立于任何语言的,CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。...spawn-fcgi是一个通用的FastCGI进程管理器,简单小巧,原先是属于lighttpd的一部分,后来由于使用比较广泛,所以就迁移出来作为独立项目。...man spawn-fcgi或spawn-fcgi -h获得,下面是部分常用 spawn-fcgi参数信息: 参数 含义 -f 指定调用FastCGI的进程的执行程序位置 -d 在部署前,切换到某个目录...-P 指定产生的进程的PID文件路径 -F 指定产生的FastCGI的进程数(C的CGI用这个) -u和-g FastCGI 使用什么身份(-u用户、-g用户组)运行,CentOS下可以使用apache

    3.1K40

    深入理解NodeJS多进程

    序言一次面试中,我提到自己用过pm2,面试接着问:「那你知道pm2父子进程通信方式吗」。我大概听说pm2有cluster模式,但不清楚父子进程如何通信。面试结束后把NodeJS的多进程重新整理了一下。...进程必然要支持后台执行(守护进程),这个又怎么实现呢?进程崩溃如何重启?重启过于频繁的不稳定进程又如何限制?如何操作进程的启动、停止、重启?这一系列的进程管理工作都有相关的工具支持。...shell,并在shell上执行命令;spawn会在父子进程间建立IO流stdin、stdout、stderr;spawn返回一个子进程的引用,通过这个引用可以监听子进程状态,并接收子进程的输入流。...的是一个文件描述符,而不是端口,相应的,client连接的也是一个文件描述符(path)。...管道本质上就是内核中的一个缓存,当进程创建一个管道后,Linux会返回两个文件描述符,一个是写入端的描述符(fd1),一个是输出端的描述符(fd0),可以通过这两个描述符往管道写入或者读取数据。

    1.8K20

    简单分析下 Node.js 关于集群的那些事

    # 《简单分析下 Node.js 关于集群的那些事》 前言: 需要了解的基础概念 一个应用程序中,至少包含一个进程,一个进程至少包含一个线程。...node 如何开启子进程 开发过程中如何实现进程守护 概念太多,我们从具体案例入手,看看单线程到底会带来什么问题。...这个问题就很难被接受了。因此得出结论,node 不太适合做 cpu 密集型的服务。 如何解决这个问题? 为了解决这个问题,我们引入子进程。...){ console.log(data); }); fork是基于spawn的,可以多传入一个silent属性, 设置是否共享输入和输出 fork原理 function fork(filename...,options){ let stdio = ['inherit','inherit','inherit'] if(options.silent){ // 如果是安静的 就忽略子进程的输入和输出

    64820
    领券