Как получить выходные данные подпроцесса и назначить его переменной. EG: назначить вывод wmic csproduct get uuid
возвращает длинную строку символов в CMD, как бы я выполнил эту команду в C ++ и назначил ее переменной?
Существует два основных варианта получения результатов процесса:
Каналы не поддерживаются стандартной библиотекой, кроме как скрытые за общей абстракцией потока. Фактически это означает, что процесс A, который создает процесс B, не может связываться с B через каналы, если для этого не используются специфические для платформы функции. В Windows поддержка сценариев, Windows Script Host, имеет прямую функциональность для конвейерного подхода, основанного на опросе для вывода из B. На гораздо более низком уровне вы можете использовать CreateProcess
API-функция. Но это не тривиально.
Используя временный файл в качестве канала связи и используя только стандартные функциональные возможности C ++, вы просто вызываете программу B через интерпретатор команд, который может перенаправить вывод B. Этот интерпретатор команд и его синтаксис составляют специфическую часть платформы. Так что даже этот подход зависит от платформы, но код C ++ как таковой переносим.
В Windows стандартная команда intepreter cmd.exe
и использует обычный Unix >
синтаксис для перенаправления вывода программы, поэтому команда, которая должна быть выполнена
cmd /c "b.exe >tempfile"
Вы можете выполнить такую команду через C ++ system
. system
Функция уже выполняет указанную команду через командный интерпретатор, который в Windows cmd.exe
, И поэтому аргумент system
нужно только
b.exe > tempfile
где tempfile
это имя или полный путь к файлу, в котором вы хотите получить результат.
Вы можете создать новое временное имя файла через tmpnam
функция.
Я предполагаю, что тег winapi относится к нужному ответу и также указывает на платформу. Итак, я думаю, что ответ _popen
Пример:
#include <stdio.h>
int main()
{
FILE* CommandResult = _popen("wmic csproduct get uuid", "rt"); //send the command to the cmd and return a pointer to the command result
char line[256]; //a buffer to read from the file
while(fgets(line, 256, CommandResult)) printf(line); //read and print all lines one by one
_pclose(CommandResult);
scanf(line); //prevent the console from closing immediately
}
Я только что понял, что должен приложить следующий отказ с любой строкой кода, прежде чем я смогу опубликовать его.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ЯВНЫХ
ПОДРАЗУМЕВАЕМЫЕ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЙ ТОВАРНОГО ОБЕСПЕЧЕНИЯ,
ФИТНЕС ДЛЯ ОСОБЫХ ЦЕЛЕЙ И НЕФРИФРИНГЕНТОВ. НИ В КОЕМ СЛУЧАЕ
АВТОРЫ ИЛИ АВТОРСКИЕ ПРАВ ЧЕЛОВЕКА НЕСУТ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ДРУГОЕ
ОТВЕТСТВЕННОСТЬ, ДЕЙСТВУЮЩАЯ ЛИ В ДЕЙСТВИИ С ДОГОВОРОМ, ИСПЫТАНИЕМ ИЛИ ИНЫМ ОБРАЗОМ, возникающим из
ИЛИ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ В
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.