Открывайте приложения, используя node.js spawn

Я пытаюсь сделать небольшое приложение с node.js, которое будет работать на Mac и выполнять некоторые команды.

Я успешно использовал spawn для запуска командных строк, таких как xcodebuild, но xcrun, похоже, не работает, когда я пытаюсь открыть iOS Simulator. Я могу открыть на терминале, набрав:

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

Но если я использую нод и попробую использовать 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)=>{

2 ответа

Порожденные процессы имеют два отдельных потока для stdout и stderr, поэтому вам нужно будет прослушивать данные об этих объектах, а не сам объект порожденного процесса:

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

Проблема была на одну строчку выше. Не знаю почему, но есть вызов socket.emit, который неверен и фактически удерживает выполнение программы.

Другие вопросы по тегам