Node.js 如何运行外部进程

Node.js 如何运行外部进程

Node.js 是一个跨平台的开源后端JavaScript运行时环境,它使用V8引擎在网页浏览器之外执行JavaScript代码。Node.js允许开发者利用JavaScript创建命令行工具和服务器端脚本,这涉及在将页面发送到用户浏览器之前在服务器上运行脚本。

在本文中,我们将讨论如何在Node.js中运行外部进程。

child_process模块为我们提供了在Node.js中运行外部进程的能力。借助child process模块,我们可以将任何系统命令作为“子进程”来访问操作系统功能。该模块为我们提供了四种创建子进程的方法:

  • spawn
  • fork
  • exec
  • execFile

现在让我们看看如何使用这些方法来运行外部进程:

注意: 在运行文件之前,请确保在package.json文件中设置 “type”: “module” 以使用import语法。

1. 使用spawn方法: 使用提供的命令和args中的命令行参数,spawn()函数会创建一个新的子进程。

语法:

spawn(command[, args][, options])

示例: 现在让我们看看如何使用spawn()方法来运行外部进程。在下面的示例中,我使用spawn()方法来列出当前工作目录中的所有文件和子目录。

index.js

import { spawn } from 'child_process'; 
  
const lsProcess = spawn('ls'); 
lsProcess.stdout.on('data', data => { 
    console.log(`stdout:\n{data}`); 
}) 
lsProcess.stderr.on("data", (data) => { 
    console.log(`stdout:{data}`); 
}); 
lsProcess.on('exit', code => { 
    console.log(`Process ended with ${code}`); 
})

运行应用程序的步骤: 在终端中输入以下命令来运行应用程序:

node index.js

输出:

Node.js 如何运行外部进程

2. 使用fork方法: fork()方法是spawn()方法的特殊情况,允许父进程和子进程使用send()方法进行通信。它允许将计算密集型的任务与主事件循环分离开来。

语法:

fork(modulePath[, args][, options])

示例: 现在让我们看一下如何使用fork()方法来运行外部进程。我在这里创建了两个独立的进程,parentFile.js和childFile.js,并通过使用fork()方法在它们之间进行通信。

parentFile.js

import { fork } from 'child_process'; 
  
const child = fork('childFile.js'); 
child.on('message', (msg) => { 
    console.log(`From child process: ${msg}`); 
}) 
  
child.send('This is parent process.')
  • childFile.js
process.on('message', (msg) => { 
    console.log(`From parent process ${msg}`); 
}) 
  
process.send('Hi from child process');

运行该应用的步骤: 在终端中输入以下命令以运行该应用:

node parentFile.js

输出:

Node.js 如何运行外部进程

3. 使用exec方法: 在运行命令之前,exec函数首先建立一个shell。

语法:

exec(command[, options][, callback])

示例: 现在让我们看一下如何使用exec()方法来运行外部进程。在以下代码中,我只是运行一个echo命令。

index.js

import { exec } from 'child_process'; 
  
exec('echo Hi', (err, stdout, stderr) => { 
    if(err){ 
        console.log(err); 
        return; 
    } 
    console.log(`stdout: ${stdout}`); 
})
process.on('message', (msg) => { 
    console.log(`From parent process ${msg}`); 
}) 
  
process.send('Hi from child process');

运行该应用的步骤: 在终端中输入以下命令来运行该应用:

node index.js

输出结果:

Node.js 如何运行外部进程

4. 使用execFile方法: execFile()方法默认不会创建shell,这使得它比exec()方法更高效。

语法:

execFile(file[, args][, options][, callback])

示例: 现在我们来看一下如何使用execFile()方法来运行外部进程。在下面的例子中,我使用execFile()方法在一个node.js文件中运行一个python文件。我已经在与node.js文件相同的目录中创建了python文件。项目结构应该如下所示:

geeksforgeeks/
├─ node_modules/
├─ hello.py
├─ index.js
├─ package.json

hello.py

print("Hello World!")

index.js

import { execFile } from 'child_process'; 
  
const pythonProcess = execFile('python3', ['hello.py']); 
pythonProcess.stdout.on("data", (data) => { 
    console.log(`stdout:\n{data}`); 
}); 
pythonProcess.stderr.on("data", (data) => { 
    console.log(`stdout:{data}`); 
}); 
pythonProcess.on("exit", (code) => { 
    console.log(`Process ended with ${code}`); 
});

运行应用程序的步骤: 在终端中写入以下命令以运行应用程序:

node index.js

输出:

Node.js 如何运行外部进程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程