带有 adb 的 QProcess 输出始终为空

Posted

技术标签:

【中文标题】带有 adb 的 QProcess 输出始终为空【英文标题】:QProcess output with adb always empty 【发布时间】:2019-10-01 23:53:54 【问题描述】:

我正在启动一个 QProcess 来获取例如“adb devices”的回归。 没有错误,总是一个空的响应。我在 Windows 的系统环境中有 adb,命令在 cmd 上运行良好。

我做错了什么还是有其他方法可以在 QT 中运行 adb 命令?

class ADBInfo: public QObject 
public:
    void start()
        process = new QProcess( this );
        process->start("adb.exe devices");

        process->waitForFinished(-1);

        qDebug() << "output: " << process->readAll();
        qDebug() << "error: " << process->readAllStandardError();
    
private:
    QProcess *process;
;

【问题讨论】:

您没有验证进程是否真正开始。 我认为它没有运行......将devices移动到进程参数列表 【参考方案1】:

这是正确的方法

   QString mainwindow::cmd(const QString &command)
   
    qDebug () << "command = "+command;
    QProcess P2;
    P2.start(command);
    P2.waitForFinished(-1);
    P2.setReadChannel(QProcess::StandardOutput);
    QTextStream reade2(&P2);
    QString line2,line,Out;
    while (reade2.readLineInto(&line2))
        Out.append(line2 +'\n');
    P2.setReadChannel(QProcess::StandardError);
    QTextStream reader(&P2);
    while (reader.readLineInto(&line))
        Out.append(line +'\n');
    P2.close();
    return Out.trimmed();

当你需要执行命令时

QString Result = cmd("adb devices")

【讨论】:

以上是关于带有 adb 的 QProcess 输出始终为空的主要内容,如果未能解决你的问题,请参考以下文章

QT软件开发: QProcess启动进程完成交互并获取输出

使用 QProcess 时无法读取命令的输出

为啥带有附加字段“指定”的字段始终为空?

在另一个窗口中显示 QProcess 输出

带有 Spring Boot KeycloakSecurityContext 的 Keycloak 始终为空

带有 RecyclerView 的自定义 AlertDialog - 列表始终为空