【问题标题】:Running cmd commands and getting results to a string variable [duplicate]运行 cmd 命令并将结果获取到字符串变量 [重复]
【发布时间】:2014-02-25 06:11:41
【问题描述】:

如何运行 cmd 命令,并将输出获取到字符串变量? 示例:

string result = ExecuteFunction("ipconfig");

现在“结果”包含:

Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix  . :
......

这应该在不显示任何 cmd 屏幕的情况下发生,全部来自程序。 当然是 Windows 平台。

【问题讨论】:

  • C++ 标签是否正确?它看起来更像 C#。上下文会有所帮助。

标签: c++ cmd


【解决方案1】:

自古以来解决这个问题的标准解决方案是使用命令行重定向将标准输出发送到文本文件,然后将文件读入字符串。

您没有提供足够的上下文来响应代码。在 C/C++ 中,您可以使用 _popen()。在 .NET 中,这个答案可能会有所帮助。 Redirect console output to textbox in separate program

【讨论】:

  • 几乎不是标准解决方案。标准解决方案是将标准输出发送到管道并读取它。无需访问文件系统。
  • 不,该解决方案仅适用于历史的 Unix/C 分支。在 MSDOS/Windows 3/VB/Access 中,分支管道不可用,但命令行重定向可用。我想这是回答没有提供足够背景的问题的问题。
【解决方案2】:

你可以建立一个管道:

在 Linux 上:

#include <cstdio>
#include <iostream>
#include <vector>

int main() {
    FILE* fp = popen("ifconfig", "r");
    if(fp) {
        std::vector<char> buffer(4096);
        std::size_t n = fread(buffer.data(), 1, buffer.size(), fp);
        if(n && n < buffer.size()) {
            buffer.data()[n] = 0;
            std::cout << buffer.data() << '\n';
        }
        pclose(fp);
    }
}

对于 Windows,您可以使用 '_popen' 并将 'ifconfig' 更改为 'ipconfig'

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2020-06-25
    相关资源
    最近更新 更多