popen() 将执行命令的输出写入 cout
popen() writes output of command executed to cout
我正在编写一个应用程序,需要打开另一个进程并获取其输出。我在网上读到的任何地方都说我必须使用popen
并从文件中读取。
但我无法从中阅读。命令的输出将输出到调用应用程序的控制台窗口中。下面是我正在使用的代码。我添加了一些打印来调试。
#include <string>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <array>
int main()
{
// some command that fails to execute properly.
std::string command("ls afskfksakfafkas");
std::array<char, 128> buffer;
std::string result;
std::cout << "Opening reading pipe" << std::endl;
FILE* pipe = popen(command.c_str(), "r");
if (!pipe)
{
std::cerr << "Couldn't start command." << std::endl;
return 0;
}
while (fgets(buffer.data(), 128, pipe) != NULL) {
std::cout << "Reading..." << std::endl;
result += buffer.data();
}
auto returnCode = pclose(pipe);
std::cout << result << std::endl;
std::cout << returnCode << std::endl;
return 0;
}
阅读实际上从未打印到我的cout
结果是一个空字符串。我在终端中清楚地看到了命令的输出。如果命令正常退出,则行为符合预期。但我只捕获错误情况下的输出。
Popen 不会只捕获 stderr。将标准输出重定向到标准输出可以解决此问题。
#include <string>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <array>
int main()
{
std::string command("ls afskfksakfafkas 2>&1");
std::array<char, 128> buffer;
std::string result;
std::cout << "Opening reading pipe" << std::endl;
FILE* pipe = popen(command.c_str(), "r");
if (!pipe)
{
std::cerr << "Couldn't start command." << std::endl;
return 0;
}
while (fgets(buffer.data(), 128, pipe) != NULL) {
std::cout << "Reading..." << std::endl;
result += buffer.data();
}
auto returnCode = pclose(pipe);
std::cout << result << std::endl;
std::cout << returnCode << std::endl;
return 0;
}
你必须在命令字符串的末尾添加"2>&1">
command.append(" 2>&1");
有一个完整的示例 https://www.jeremymorgan.com/tutorials/c-programming/how-to-capture-the-output-of-a-linux-command-in-c/
相关文章:
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- std::cout输出int时出现编译错误
- COUT 无法提供输出可能是由于内联组装
- 为什么我的 cout 在输出中没有显示字符串?
- 调用 cout 时如何在结构中输出常量文本?
- 如何在C++中编写 ostream 的向量,它接收所有不同的输出流,如 cout、ostringstream 和 ofs
- Vscode/C++ - cout 无法输出完整的句子,也无法与整数连接
- 我的 cout 上有一个奇怪的输出,它把答案放在第一位,然后在我调用它的地方放一个奇怪的输出.我该怎么办?
- 在 CPP 中使用 cout 的重复输出
- 在 c++ 中使用 cout.precision() 的奇怪输出
- 为什么'std::cout << !+2 '输出 0?
- 对于输出,std::copy是否比std::cout快
- 在视觉工作室中以十六进制进行位移位并通过 cout 输出
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 如何从控制台 c++(从 cout)捕获输出
- 为什么cout输出内存地址不是字符串?
- Jupyter笔记本未显示C 输出(COUT)
- 输出 cout 是感叹号.C++
- 无法从C++循环实现所需的输出 (COUT)
- "定向到标准输出(cout)"是什么意思?