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
当进程终止时使用输出调用。error
stdout
stderr
:成功后,error
将是null
。 出错时,error
将是Error
的实例。error.code
属性将是进程的退出码。 按照惯例,除0
之外的任何退出码都表示错误。error.signal
将是终止进程的信号。
-
返回: <ChildProcess>
以本项目为例,调用Hexo命令
1 |
|
几个注意事项:
- 文章名要用双引号引起来,不然特殊字符、空格等可能导致出错
- 编码选择gbk
- 后续操作(这里就是打开新建的文章)要写在退出后的子进程回调的最后,不能写在主进程里!!
当然,还有写其他写法,都涉及到js语法,可以参考官网api[2:1]
例如:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 若叶!