添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

原文发表在我的博客 Node.js 执行系统命令 | 以太空间
欢迎访问我的博客首页 以太空间 | 陈文岗的博客

我们在使用Node.js的时候总有一些时候需要执行一些系统命令,与系统做一些交互,或者调用其他语言,这个时候该怎么做呢?
当然是使用 child_process 模块了,这个模块翻译过来就是子进程,当然正如其名,这个模块主要是通过产生子进程来发挥作用,下面我们就用实例来看一下。

一、 exec execSync

这是 child_process 模块里面最简单的函数,作用就是执行一个固定的系统命令

const { exec } = require('child_process');
// 输出当前目录(不一定是代码所在的目录)下的文件和文件夹
exec('ls -l', (err, stdout, stderr) => {
    if(err) {
        console.log(err);
        return;
    console.log(`stdout: ${stdout}`);
    console.log(`stderr: ${stderr}`);

  exec函数第一个参数是要执行的命令,的第二个函数是配置选项,第三个参数是回调函数,第二个参数中一个比较常用的就是子进程的工作目录

const { exec } = require('child_process');
const path = require('path'):
// 在当前目录下的scripts文件夹里执行hexo g命令
exec('hexo g', { cwd: path.join(process.cwd(), 'scripts') }, (err, stdout, stderr) => {
    if(err) {
        console.log(err);
        return;
    console.log(`stdout: ${stdout}`);

  execSyncexec的同步版本,不过无论是execSync还是exec,得到的结果都是字符串或者Buffer对象,一般需要进一步处理。

请参考:exec具体配置execSync具体配置

二、execFileexecFileSync

  这两个函数的作用是执行一个可执行文件,看下面的实例:

const { execFile, execFileSync } = require('child_process');
execFile('example.py', [], (err, stdout, stderr) => {
    if(err) {
        console.log(err);
        return;
    console.log(`stdout: ${stdout}`);
const stdout = execFileSync('node', ['-v']);
console.log(stdout);

  跟exec类似,第一个参数是要执行的文件路径,第二个是参数数组,第三个是配置,第四个是回调函数,当然,除了第一个之外都是可以省略的

注意:被执行的文件一定要有可执行权限,如果是类似.py类的特定语言的脚本,一定在开头指定解释器程序路径

请参考:execFile配置execFileSync配置

三、spawnspawnSync

  child_process模块中所有函数都是基于spawnspawnSync函数的来实现的,换句话来说,spawnspawnSync函数的配置是最完全的,其它函数都是对其做了封装和修改。下面我们来重点讲解一下:
  spawn函数原型是这样的:child_process.spawn(command[, args][, options])

  它使用指定的命令行参数创建新进程,spawn 会返回一个带有stdout和stderr流的对象。你可以通过stdout流来读取子进程返回给Node.js的数据。stdout拥有'data','end'以及一般流所具有的事件。当你想要子进程返回大量数据给Node时,比如说图像处理,读取二进制数据等等,你最好使用spawn方法

const {spawn}  = require('child_process');
const fs = require('fs');
const spawnObj = spawn('ping', ['127.0.0.1'], {encoding: 'utf-8'});
spawnObj.stdout.on('data', function(chunk) {
    console.log(chunk.toString());
spawnObj.stderr.on('data', (data) => {
  console.log(data);
spawnObj.on('close', function(code) {
    console.log('close code : ' + code);
spawnObj.on('exit', (code) => {
    console.log('exit code : ' + code);
    fs.close(fd, function(err) {
        if(err) {
            console.error(err);
                      原文发表在我的博客 Node.js 执行系统命令 | 以太空间   欢迎访问我的博客首页以太空间 | 陈文岗的博客  我们在使用Node.js的时候总有一些时候需要执行一些系统命令,与系统做一些交互,或者调用其他语言,这个时候该怎么做呢?   当然是使用child_process模块了,这个模块翻译过来就是子进程,当然正如其名,这个模块主要是通过产生子进程来发挥作用,下面我们就用实...
				
11. node多进程之同步方法——execSyncexecFileSync、spawnSync execSyncexecFileSync同步方法直接返回内容,内容是Buffer类型 spawnSync返回的是一个对象,里面有stdout,output等等,这几个属性内容是buffer类型,还有status,pid等等 同步方法的错误用try…catch(err){…}来捕获 const cp = require('child_process') // 同步方法直接返回内容,内容是Buffer类型
在特定的Node.js版本上运行任何命令。 与nvm exec不同,它可以:一次运行多个Node.js版本,可以以编程方式运行,速度提高5倍,不需要为每个Node版本单独执行安装步骤。在特定的Node.js版本上运行任何命令。 与nvm exec不同,它可以:一次运行多个Node.js版本,可以以编程方式运行,速度提高5倍,并且每个Node版本都不需要单独的安装步骤,可以运行主要版本的最新次要版本/修补程序版本,从而自动在Windows上运行。 无需以管理员身份运行。 不需要将Bash作为节点模块安装(与通过curl下载的Bash安装脚本相反),nve执行单个文件或命令。
前几篇中,我们了解过execFile,spawn、exec几种创建子进程的方法。它们所创建的子进程,都是异步的。 而有时候,需要同步的执行,即:希望得到它们的执行结果,再继续运行程序。那么该如何实现呢? 1、execFileSync 它是execFile的同步方法,使用方法如下: var ex = require("child_process").execFileSync; var s...
重要说明:该存储库不再维护。 现在,节点v0.12内置了相同的功能: ://nodejs.org/api/child_process.html#child_process_child_process_exec_execsync_command_options 执行同步 同步执行shell命令。 将此用于迁移脚本,cli程序,而不用于常规服务器代码。 安装npm(节点程序包管理器) $ curl http://npmjs.org/install.sh | sh 安装执行同步 $ cd /path/to/your/project $ [sudo] npm install exec-syncnode.js使用exec-sync 警告:仅用于用node编写的特殊操作或命令行脚本。 请勿将其用于常规服务器代码,否则将破坏服务器的响应能力。 var execSync = requ
const { execSync } = require('child_process'); execSync('./node_modules/.bin/babel plugins/router-generator/src --out-dir plugins/router-generator/dist') node执行该代码,在Mac执行没问题,但在win10执行,则报错: '.' 不是内部或外...
其实,对于这样的需求,我是在工作看到我们前段老大,再给我看vue项目的时候,我发现,他在vue项目里面有一个server.js的文件(跟package.json放在同级目录),我打开一看,nodejs。一般前端都是,采用nodejs作为后端写接口,调试我们自己的页面。而一般我们都是,先开启vue项目,另外再开启一个nodejs服务,但是 能不能输入一条命令,开启两个服务呢? 下面就是关键:
Node.js中的同步执行 每个人都喜欢NodeJS,部分原因是它拥护无阻塞的哲学。 交互是异步的,因此从理论上讲,它允许更快的全方位处理。 当为我即将进行的重新设计创建简单的脚本时,我发现异步性……很烦人。 我通过Node.js运行的服务器执行Swift陷入回调地狱。 幸运的是,我找到了一个名为exec-sync的好程序包,它允许同步执行Shell命令,这样我就不会发现很多回调。 Node.js版本8及更高版本: $ npm install cross-spawn Node.js版本7及以下版本: $ npm install cross-spawn@6 在Windows上使用Spawn时,节点出现问题: 使用运行命令时遇到问题 使用posix相对路径运行命令时遇到问题(例如: ./my-folder/my-executable ) 有一个用命令垫片(在文件node_modules/.bin/ ),其中包括引号和括号参数会导致 在节点<v4.8上没有options
nodejs命令行执行程序by Peter Benjamin 彼得·本杰明(Peter Benjamin) 在NodeJS中编写命令行应用程序 (Writing Command-Line Applications in NodeJS) With the right packages, writing command-line apps in NodeJS is a breeze. 有了合适的软...
Node.js是一种很流行的JavaScript运行环境,它可以让我们使用JavaScript编写服务器端应用程序和命令行工具。如果你想在自己的电脑上运行Node.js,那么你需要配置Node.js环境。以下是Node.js环境配置的步骤: 1. 下载Node.js安装包:可以在Node.js官网上下载Node.js的安装包,也可以使用nvm(Node Version Manager)工具进行安装。 2. 安装Node.js:运行下载的安装包,按照提示进行安装。 3. 配置环境变量:将Node.js的可执行文件目录添加到系统的环境变量中,这样就可以全局运行Node.js命令了。通常来说,Windows系统的环境变量设置路径为“计算机属性 - 高级系统设置 - 环境变量”,在“系统变量”中找到“Path”选项,编辑并添加Node.js的可执行文件目录即可。 4. 验证Node.js安装是否成功:打开命令行工具,输入“node -v”,如果成功返回版本号,则说明Node.js安装成功。 除了上述基本的配置步骤,Node.js的其他配置也很重要。比如,可以选择配置npm(Node.js Package Manager),通过npm可以方便地安装和管理node.js模块。此外,还可以安装一些常用的node.js模块,如Express.js等。 总之,Node.js环境配置需要注意一些基本步骤和细节,这样才能保证程序正确运行,提高开发效率。