QProcess异常QT

Posted

技术标签:

【中文标题】QProcess异常QT【英文标题】:QProcess exception QT 【发布时间】:2013-08-15 11:23:05 【问题描述】:

我正在开发一个创建和运行另一个 Qprocess 的应用程序。我的代码是:

QProcess myProcess = new QProcess();
connect(myProcess, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(sendProcessCompleted(int,QProcess::ExitStatus)));
connect(myProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(sendProcessError(QProcess::ProcessError)));


myProcess->start(program, arguments);


void SensorSimulator::sendProcessCompleted(int exitError, QProcess::ExitStatus exitStatus)

    if(exitStatus == QProcess::CrashExit)
    
        QString errorMessage("SensorSimulator is unexpectedly crashed.");
        emit ProcessError(errorMessage);
    
    else
    
        QString p_stdout = myProcess->readAllStandardOutput();
        QString p_stderr = myProcess->readAllStandardError();
    



void SensorSimulator::sendProcessError(QProcess::ProcessError error)


    QString p_stdout = myProcess->readAllStandardOutput();
    QString p_stderr = myProcess->readAllStandardError();
    QString errorMessage;
    errorMessage = "SensorSimulator is unexpectedly crashed. ProcessError: " + error;
    //emit ProcessError(errorMessage);

我在 p_stdout 中遇到了这个异常:

正在运行,停止按“S”或关闭窗口。 发现异常:类型:System.InvalidOperationException 消息: 当任一应用程序未按下时,无法查看是否已按下某个键 有一个控制台或当控制台输入已从文件重定向时。 试试 Console.In.Peek。

有人可以帮忙吗?

编辑:我正在运行的进程是一个 .Net 应用程序

【问题讨论】:

您创建 QProcess 的代码看起来像是对局部变量而不是类成员进行操作。试试myProcess = new QProcess,而不是QProcess* myProcess = new QProcess 它的类成员,我只是复制到这里作为例子 因此,您的 Qt 程序创建了一个 QProcess 来启动一个 .Net 程序。 .Net 程序崩溃时发生了一个异常,该异常恰好输出到 stdout,而不是 stderr,并且您将 .Net 崩溃归咎于 Qt?我错过了什么吗? 显然你是对的,这是一个 .Net 崩溃。但是当我手动运行exe时不会发生崩溃 - 而不是来自QT。所以我认为这应该是一个 QT 问题 - 不是吗?如果不是,可能是什么问题? 我该怎么做才能找到问题? 【参考方案1】:

问题有点具体,但解决方案可以帮助有相同错误消息的人了解它是什么。 我运行的进程使用了​​Console.KeyAvailable 属性,当进程的输入是重定向输入时,根据MSDN 抛出异常:

InvalidOperationException : 标准输入被重定向到文件 而不是键盘。

当我将其更改为 Console.In.Peek 时,一切正常。

【讨论】:

以上是关于QProcess异常QT的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt QProcess 中运行 sudo 命令

Qt QProcess::finished() 信号没有这样的插槽

QProcess异常QT

Qt4、QProcess、R:标准输出中的垃圾,行较长

在 Qt 中获取输出:'QProcess::start()' 和 'QProcess:readAllStandardOutPut()'

如何在 QProcess 执行它们时打印真正的 QProcess 参数列表