Вызов typeperf из кода Go для получения информации о системе - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь получить список процессов, включая их текущую загрузку.typeperf "\Process(*)\% Processor Time" -sc 1, кажется, дает мне вывод, который я хочу.Выполнение этого из cmd работает.

Теперь я пытаюсь вызвать эту команду из моего кода Go

// Command to list processes
cmdPS := exec.Command("typeperf", "\"\\Process(*)\\% Processor Time\"", "-sc", "1")
cmdPS.Stdout = &buff
cmdPS.Stderr = &errBuff
err := cmdPS.Run()
if err != nil {
    log.Printf("Err: %s", buff.String())
    return nil, errors.Wrapf(err, "Failed to call: ps ax -o")
}

Это приводит к:

Exiting, please wait...
Error: No valid counters.

Note:
  In order to use typeperf, you must either be a member of the local
  Performance Log Users group, or the command must be executed from an
  elevated command window.

СпособЯ неправильно форматирую командную строку?Я ожидаю, что при выполнении этой команды напрямую и через Go она будет работать с теми же разрешениями.

1 Ответ

0 голосов
/ 18 октября 2018

Похоже, вам нужно удалить экранированные кавычки.Оболочка (или cmd в этом случае) будет обрабатывать аргументы за вас.

Однако выполнение typeperf "\Process(*)\% Processor Time" -sc 1 приводит к следующему на моей машине.

Error: No valid counters.

Note:
  In order to use typeperf, you must either be a member of the local
  Performance Log Users group, or the command must be executed from an
  elevated command window.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...