#javascript #node.js #macos #command-line-arguments #child-process
#javascript #node.js #macos #аргументы командной строки #дочерний процесс
Вопрос:
Возникли некоторые трудности с запуском моей команды по желанию. Я не могу сказать, нужно ли мне изменение в коде или в команде.
Цель: ProgramA проверяет, запущена ли ProgramB. Grep возвращает соответствующие процессы. Флаг возвращает значение true. A подключается к B. Если не выполняется, флаг возвращает False.
Я думаю, что проблема заключается в моей дочерней команде процесса для запроса активных процессов. Он проверяет количество процессов и возвращает количество. Если программа запущена, command возвращает число (например, 4), а TrueFalse возвращает true . Если программа не запущена, команда возвращает 0. Флаг TrueFalse возвращает false .
После дальнейшего изучения: похоже, может быть, моя логика в TrueFalse плоха? Я пытаюсь взять стандартный вывод и ввести его в строку, а затем проверить, не больше ли это числа. Который, кажется, всегда возвращает false . Но я не могу понять, почему. Это сводит меня с ума. Я уверен, что это тоже что-то простое.
Код:
// Variable for application process we are checking.
let query = 'ProgramB';
const programCheck = (query, trueFalse) => {
// Using nodeJS to find the OS
let platform = process.platform;
// Variable to hold command to send to terminal
let cmd = '';
// Switch for the platform to distinguish which OS the user has - So we can use the
// correct command for querying the active processes.
switch(platform) {
// Windows
case 'win32' : cmd = `tasklist /FI "IMAGENAME eq ${query}.exe"`;
break;
// Mac
case 'darwin' : cmd = `ps -ax | grep -v grep | grep ${query}`;
break;
// Linux
case 'linux' : cmd = `ps -ef | grep '${query}'`;
break;
// Default - Other
default : console.log(`Unknown Operating System, unable to check ${query}`);
break;
}
// Calling child process
exec(cmd, (err, stdout, stderr) => {
trueFalse(stdout.toLowerCase().indexOf(query.toLowerCase()) > -1);
if (err) throw err;
});
}
Комментарии:
1. Что происходит? Это
trueFalse
функция? Почему вы передаете его вprogramCheck
?programCheck
Предполагается вернутьtrue
илиfalse
? Как вы звонитеprogramCheck
?2. Проверка программы вызывается при нажатии кнопки HTML. (Извините, я должен был это прояснить). Идея TrueFalse заключается в том, что при вызове дочернего процесса в exec (..) будет bool . Мне просто нужен флаг для системы, чтобы разрешить «Да, программа запущена, отправить команду подключения или нет, программа не запущена, отправить команду запуска»
3. Текущий код, который у меня есть, идеально подходит для Windows, но команда Mac вызывает у меня проблему.
4. ради аргумента. можете ли вы отредактировать свой пост и добавить функцию для
trueFalse()
5. кроме того, существует очень популярный модуль, который может здесь помочь. npmjs.com/package/ps-node