Открывайте приложения, используя 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, который неверен и фактически удерживает выполнение программы.