使用node.js spawn打开应用程序

我正在尝试使用node.js来执行一些可以在mac上运行并执行一些命令的应用程序。

我已经成功地使用了spawn来运行命令行,如xcodebuild,但是当我尝试打开iOS模拟器时xcrun似乎不工作。 我可以打开terminal键入:

xcrun instruments -w 'iPhone 5s (9.2)' -t <template> 

但是,如果我使用节点,并尝试使用像这样的产卵:

 var args = ['instruments', '-w', `iPhone 5s (9.2)`, '-t', 'noTemp']; var xcrun = spawn('xcrun', args); 

所以这让我想,也许它有一些限制开放的应用程序? 我试图运行:

 var args = ['/Applications/Spotify.app']; var xcrun = spawn('open', args); 

没有任何反应。 我找不到任何相关的东西。 我的问题是:有无论如何打开应用程序使用node.js产卵? 如果有,是否有人知道我的代码有什么问题?

这里是完整的代码,如果需要的话:

 var args = ['instruments', '-w', `${fullDevice}`, '-t', 'noTemp']; var xcrun = spawn('xcrun', args); xcrun.stdout.on('data', (data)=>{ console.log(data.toString('utf8')); }) xcrun.on('close', (code) => { socket.emit({ time: commands.getCurrentTime(), type: 'success', log: 'Device booted...' }); callback(); if (code !== 0) { console.log(`open process exited with code ${code}`); } }); 

OBS:如果我运行这段代码,应用程序不会终止,程序不会继续,也不会发生任何事情。

编辑:改变:

 xcrun.on('data', (data)=>{ 

至:

 xcrun.stdout.on('data', (data)=>{ 

产生的进程有两个独立的stdout和stderrstream,所以你需要监听这些对象的数据而不是产生的过程对象本身:

 xcrun.stdout.on('data', function(data) { console.log('stdout: ' + data.toString()); }); xcrun.stderr.on('data', function(data) { console.log('stderr: ' + data.toString()); }); 

问题是上面的一行。 不知道为什么,但有一个socket.emit调用是错误的,并且实际上保持程序的执行。