gpt4 book ai didi

c - popen 不会捕获命令的所有输出

转载 作者:行者123 更新时间:2023-11-30 18:24:58 26 4
gpt4 key购买 nike

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QProcess>
#include <QFile>
#include <QDebug>
#include <stdio.h>

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

FILE* file1 = popen ("make", "r");

char buff[5122];

while(fgets(buff, sizeof(buff), file1)!=NULL)
{
qDebug() << "from here: " << buff;
}


QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral ("qrc:/main.qml")));
return app.exec();
}

使用 make 命令,输出为:

QML 调试已启用。仅在安全的环境中使用此功能。
从这里开始:make:什么都不做首先'。`

使用 ping 命令,输出为:

QML debugging is enabled. Only use this in a safe environment.
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination
<小时/>

如您所见,使用 make 命令,输出被 qDebug 捕获并显示。 但是,ping 的情况并非如此。

无论是错误还是其他什么,我希望通过我的程序通过 qDebug 捕获并显示每个输出。

我现在应该做什么?

最佳答案

在您的代码中:

FILE* file1 = popen ("make", "r");

您可以使用机器上有用的任何 shell 命令。例如,您可以将标准错误重定向到与标准输出相同的目的地,并通过管道捕获两者:

FILE* file1 = popen ("make 2>&1", "r");

进一步阅读:

虽然在技术上可以打开多个管道到子进程,但它比单行调用 popen 复杂得多:

关于c - popen 不会捕获命令的所有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com