我如何在c++中得到命令的输出
How do I get output of command in C++?
如何获得子流程的输出并将其分配给变量?例如:分配wmic csproduct get uuid
的输出在CMD中返回一长串字符,我如何在c++中运行该命令并将其分配给变量?
捕获流程的输出有两个主要选项:
- 将其重定向到一个文件,然后稍后读取该文件。
- 使用管道
管道,除了隐藏在公共流抽象之后。实际上,这意味着创建进程B的进程a不能通过管道与B通信,除非使用了特定于平台的功能。在Windows中,脚本支持,Windows Script Host,有管道方法的直接功能,基于轮询b的输出。在一个更低的级别,你可以使用CreateProcess
API函数。但这并不是一件小事。
使用临时文件作为通信通道,并且仅使用标准c++功能,您只需通过可以重定向B的输出的命令解释器调用程序B。这个命令解释器和它的语法构成了特定于平台的部分。因此,即使这种方法是特定于平台的,但c++代码本身是可移植的。
在Windows中,标准的命令解释器是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
}
编辑:
我刚刚意识到,在发布之前,我必须在每一行代码中附加以下免责声明。
软件是"按原样"提供的,没有任何形式的、明示的或明示的保证默示,包括但不限于对适销性的保证;适合某一特定目的和不侵权。在任何情况下都不得作者或版权持有人应对任何索赔、损害赔偿或其他责任在合同诉讼、侵权诉讼或其他诉讼中,因下列原因引起的责任:不属于或与本软件或本软件的使用或其他交易有关软件。
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- C++编译器命令 C++ 不会生成输出
- 使用提升过程获取 shell 命令的标准输出
- cmake add_custom_command + Xcode:多输出 = 多命令调用
- gdb 中的列表命令不输出我编写的代码
- Windows 10命令提示符的输出不正确
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 获取使用p4api运行的Perforce命令的输出
- 在结束运行之前获取 c++ 中的 shell 命令输出
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- 终端命令输出到 CPP 中的数组
- Valgrind 在主机名命令输出中显示内存泄漏
- C++ 无限循环读取文件创建重定向命令输出
- 如何在windows中的gcc中逐行读取命令输出,就像使用标准输入一样
- 微软nmake:是否可以从shell命令输出中定义宏
- GNU Make -在规则/目标中设置shell命令输出中的MAKEFILE变量
- nm 命令输出中的"@@"符号是什么意思?
- 无法理解核心文件分析的 GDB x 命令输出
- 如何将系统命令输出存储在变量中