2016-02-25 94 views
2

我想要做一个应用程序与node.js,将在mac上运行并执行一些命令。打开应用程序使用node.js spawn

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

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)=>{ 
+0

我想在第一个代码示例中,你打算把''xcrun''而不是''open''? – mscdex

+0

对,修好了!谢谢 –

回答

1

产生的进程有stdoutstderr两个独立的数据流,所以你需要侦听这些对象的数据,而不是催生过程对象本身:

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

你是对的,但它仍然行不通... –

0

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

相关问题