Electron-vue开发实战(五)| 主进程调用CMD
主进程调用cmd其实就是node.js调用cmd
有两种方法:[1]
- 使用child_process
- 安装使用node-cmd
这里直接用第1种方法
Node.js child_process⁍
import { exec } from 'child_process'
默认情况下,会在父 Node.js 进程和衍生的子进程之间建立 stdin、stdout 和 stderr 的管道。 [2]
在 Windows 上衍生 .bat 和 .cmd 文件⁍
child_process.exec(): 衍生 shell 并在该 shell 中运行命令,完成后将stdout和stderr传给回调函数。child_process.execFile(): 与child_process.exec()类似,不同之处在于,默认情况下,它直接衍生命令,而不先衍生 shell。
child_process.exec() 和 child_process.execFile() 之间区别的重要性可能因平台而异。
- 在 Unix 类型的操作系统(Unix、Linux、macOS)上,
child_process.execFile()可以更高效,因为它默认不衍生 shell。 - 在 Windows 上,
.bat和.cmd文件在没有终端的情况下无法自行执行,因此无法使用child_process.execFile()启动。 因此, 在 Windows 上运行时,.bat和.cmd文件可以使用具有shell选项集的child_process.spawn()、使用child_process.exec()、或通过衍生cmd.exe并将.bat或.cmd文件作为参数传入(这也是shell选项和child_process.exec()所做的)来调用。
在任何情况下,如果 脚本文件名 包含空格,则需要加上引号。
(注意是文件名)
child_process.exec(command[, options][, callback])⁍
-
options- ⭐
cwd子进程的当前工作目录。 默认值:process.cwd()。 env环境变量键值对。 默认值:process.env。- ⭐
encoding默认值:'utf8'(如果有中文,建议改为gbk) shell用于执行命令的 shell。 请参阅 shell 的要求和默认的 Windows shell。 默认值: Unix 上是'/bin/sh',Windows 上是process.env.ComSpec。signal允许使用中止信号中止子进程。timeout默认值:0。(如果timeout大于0,则如果子进程运行时间超过timeout毫秒,父进程将发送由killSignal属性(默认为'SIGTERM')标识的信号。)maxBuffer标准输出或标准错误上允许的最大数据量(以字节为单位)。 如果超过,则子进程将终止并截断任何输出。 请参阅 maxBuffer 和 Unicode 的注意事项。 默认值:1024 * 1024。killSignal默认值:'SIGTERM'uid设置进程的用户标识(参见setuid(2))。gid设置进程的群组标识(参见setgid(2))。- ⭐
windowsHide隐藏通常在 Windows 系统上创建的子进程控制台窗口。 默认值:false。
- ⭐
-
⭐
callback当进程终止时使用输出调用。errorstdoutstderr:成功后,error将是null。 出错时,error将是Error的实例。error.code属性将是进程的退出码。 按照惯例,除0之外的任何退出码都表示错误。error.signal将是终止进程的信号。
-
返回: <ChildProcess>
以本项目为例,调用Hexo命令
1 | |
几个注意事项:
- 文章名要用双引号引起来,不然特殊字符、空格等可能导致出错
- 编码选择gbk
- 后续操作(这里就是打开新建的文章)要写在退出后的子进程回调的最后,不能写在主进程里!!
当然,还有写其他写法,都涉及到js语法,可以参考官网api[2:1]
例如:
1 | |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 若叶!




