我正在尝试使用node.js做一个小应用程序,它可以在mac上运行并执行一些命令。
我已成功使用spawn来运行命令行,例如xcodebuild,但是当我尝试打开iOS模拟器时,xcrun似乎不起作用。 我可以通过键入以下命令在终端上打开:
xcrun instruments -w 'iPhone 5s (9.2)' -t <template>
但是如果我使用node并尝试使用这样的spawn:
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 spawn打开应用程序?如果有,有人知道我的代码有什么问题吗?
如果需要,这是完整的代码:
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 :(得分:1)
产生的进程有stdout和stderr两个独立的流,因此您需要侦听这些对象的数据而不是生成的进程对象本身:
xcrun.stdout.on('data', function(data) {
console.log('stdout: ' + data.toString());
});
xcrun.stderr.on('data', function(data) {
console.log('stderr: ' + data.toString());
});
答案 1 :(得分:0)
问题出在上面一行。不知道为什么,但是有一个socket.emit调用是错误的,实际上是执行程序。