UNPKG

wsemi

Version:

A support package for web developer.

93 lines (79 loc) 2.45 kB
import cp from 'child_process' import isestr from './isestr.mjs' /** * 呼叫執行檔執行 * * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/execProcess.test.mjs Github} * @memberOf wsemi * @param {String} prog 輸入執行檔或程式語言位置字串, 若為註冊系統的全域指令, 例如可直接給'Python', 腳本需自行接收呼叫引數, 並將回傳資料轉json字串後print/log到dos視窗, 即可由nodejs接收 * @param {String|Array} args 輸入腳本檔案位置字串或參數 * @returns {*} 回傳任意資料 * @example * //need test in nodejs * * if (true) { * let prog = 'prog.exe' * let args = 'input' * execProcess(prog, args) * .then(function(data) { * console.log('then', data) * }) * .catch(function(data) { * console.log('catch', data) * }) * } * * if (true) { * let prog = `"C:\\Program Files\\7-Zip\\7z.exe"` * let pw = 'AbcD1234' * let args = `a aaa.7z aaa.txt -p${pw}` * execProcess(prog, args) * .then(function(data) { * console.log('then', data) * }) * .catch(function(data) { * console.log('catch', data) * }) * } * */ function execProcess(prog, args) { function toUtf8(c) { try { return c.toString('utf8') } catch (err) {} return '' } return new Promise(function(resolve, reject) { let msg = '' //exec let r = cp.exec(`${prog} ${args}`, (err, stdout, stderr) => { if (err) { return reject(err) } //stdout stdout = toUtf8(stdout) if (isestr(stdout)) { // console.log('stdout', stdout) msg += stdout } //stderr stderr = toUtf8(stderr) if (isestr(stderr)) { // console.log('stderr', stderr) msg += stderr } }) // //exit, 會比close先觸發 // r.on('exit', (code) => { // // console.log('exit code', code) // }) //close r.on('close', (code) => { // console.log('close code', code) resolve(msg) }) }) } export default execProcess