2016-06-28 2 views
0

Я создаю сценарий автоматизации для моего проекта узла, и я встретил небольшую проблему, которую я не могу решить.Как отменить отдельную команду в узле в режиме молчания/not_silent?

Я хочу начать 3 отдельных процесса, используя задания: selenium-standalone start для тестов, mongod --dbpath ./mongo и node app.js. Я использую подобный код для всех из них

var spawn = require('child_process').spawn, 
command = 'selenium-standalone.cmd', // or "mongod" or "node" 
args = ['start']; // or ["--dbpath", path.join(process.cwd() + "/mongo/")] or ['app.js'] 
var ch = spawn(command, args, { 
       detached: true, 
       env: process.env, 
       stdio: 'ignore' 
      }); 
ch.unref(); 

Все proccesses успешно начать в фоновом режиме, но с различным поведением. Selenium открывает новое окно терминала, поэтому я вижу, что он делает, и я могу закрыть его двойным ctrl+C. Но mongod --dbpath ./mongo и node app.js запускается тихо. Они работают, и я могу найти их в диспетчере задач (или ps *mongod*).

Итак, мой вопрос: как я могу повлиять на это поведение? Я хочу объединить его и использовать некоторый внешний параметр конфигурации для его правила.

Я использую узел в Windows 10.

Спасибо.

ответ

0

Обход я нашел:

// This one will close terminal window automatically. 
// all output will be in terminal window 
spawn("cmd", ["/k", "node", options.appFile], { 
        detached: true, 
        stdio: 'inherit' 
       }).unref(); 

// This one will NOT close terminal window automatically after proccess ends his job 
// for some reason `spawn('start', [...])` will failed with ENOENT 
spawn("cmd", ["/c", "start", "cmd", '/k', "node", options.appFilePath], { 
       detached: true, 
       stdio: 'inherit' 
      }).unref(); 

// This is freak one. All output will go to the file. 
// New terminal window will not be opened 
spawn("cmd", ["/c", "start", "cmd", '/k', "node", options.appFilePath, options.logFilePath,"2>&1"], { 
       detached: true, 
       stdio: 'inherit' 
      }).unref(); 

// This one is better than previous. Same result 
var out = fs.openSync(options.logFilePath, 'a'), 
    stdioArgs = ['ignore', out, out]; 
spawn("node", [options.appFilePath], { 
      detached: true, 
      stdio: stdioArgs 
     }).unref(); 

Надежда, кто-то будет полезно.

Смежные вопросы