【问题标题】:Blocking the standard error output of a programmatically run system command阻止以编程方式运行的系统命令的标准错误输出
【发布时间】:2009-01-16 19:18:52
【问题描述】:

我有这个 C++ 程序:

#include <iostream>
using namespace std;
int main()
{
char buf[50];
cin.getline(buf,49);
system(buf);
return 0;
}

当我运行并编译它并输入例如“helo”时,我的程序会打印错误:

  "helo" not found.

我可以阻止显示此错误吗?有没有办法从系统命令中禁用错误​​?

【问题讨论】:

    标签: c++ external-process standard-error


    【解决方案1】:

    您无法更改system 显示错误的方式。 C 和 C++ 在这方面对实现几乎没有要求甚至没有要求,因此大部分都未指定,以使它们尽可能灵活。

    如果您想要更精确的控制,您应该使用运行时库或操作系统接口的功能。尝试 linux/unix 中的 execvp(参见 man execvp)或 Windows 系统的 CreateProcess 函数,它使用 Windows API 可以很好地控制错误处理和其他内容。

    【讨论】:

      【解决方案2】:

      你在linux上吗?尝试输入“./hello”

      如果这样可行,原因是当前目录(“.”)不在搜索路径中。您必须指出编译后的程序在目录中。

      或者,您可以执行类似的操作

      导出 PATH=$PATH:.

      这增加了“。” (当前目录)到搜索路径。

      如果您在 Windows 上,请尝试“hello.exe”

      【讨论】:

      • 如果您在 Windows 下,请不要忘记将 ./hello 替换为 .\hello.exe。
      • 我不认为 OP 关心的是命令无效; OP 正试图阻止显示该错误消息。
      • Windows 上“hello.exe”之前不需要“.\”,因为“.”始终在搜索路径上。
      【解决方案3】:

      如果您使用的是 Linux,可以尝试将错误输出重定向到 null 设备吗?

      strcat(buf, "2> /dev/null");
      system(buf);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-28
        • 2023-03-29
        • 2010-09-13
        • 2020-05-26
        • 2014-08-19
        相关资源
        最近更新 更多