# HG changeset patch # User Chris Cannam # Date 1593600067 -3600 # Node ID 5de2b710cfae265e2253547a641c77be66cf1977 # Parent 83a7b10b7415cc7160edf36bcb5a4f3638a3af9f Log external program stderr to our log file diff -r 83a7b10b7415 -r 5de2b710cfae align/ExternalProgramAligner.cpp --- a/align/ExternalProgramAligner.cpp Fri Jun 26 13:48:52 2020 +0100 +++ b/align/ExternalProgramAligner.cpp Wed Jul 01 11:41:07 2020 +0100 @@ -99,13 +99,18 @@ other->setAlignment(m_alignmentModel); m_process = new QProcess; - m_process->setProcessChannelMode(QProcess::ForwardedErrorChannel); + m_process->setProcessChannelMode(QProcess::SeparateChannels); connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(programFinished(int, QProcess::ExitStatus))); + connect(m_process, + SIGNAL(readyReadStandardError()), + this, + SLOT(logStderrOutput())); + QStringList args; args << refPath << otherPath; @@ -140,6 +145,37 @@ } void +ExternalProgramAligner::logStderrOutput() +{ + if (!m_process) return; + + m_process->setReadChannel(QProcess::StandardError); + + qint64 byteCount = m_process->bytesAvailable(); + if (byteCount == 0) { + m_process->setReadChannel(QProcess::StandardOutput); + return; + } + + QByteArray buffer = m_process->read(byteCount); + while (buffer.endsWith('\n') || buffer.endsWith('\r')) { + buffer.chop(1); + } + + QString str = QString::fromUtf8(buffer); + + cerr << str << endl; + + QString pfx = QString("[pid%1] ").arg(m_process->processId()); + str.replace("\r", "\\r"); + str.replace("\n", "\n" + pfx); + + SVDEBUG << pfx << str << endl; + + m_process->setReadChannel(QProcess::StandardOutput); +} + +void ExternalProgramAligner::programFinished(int exitCode, QProcess::ExitStatus status) { @@ -153,6 +189,8 @@ return; } + logStderrOutput(); + auto alignmentModel = ModelById::getAs(m_alignmentModel); if (!alignmentModel) { SVCERR << "ExternalProgramAligner: AlignmentModel no longer exists" diff -r 83a7b10b7415 -r 5de2b710cfae align/ExternalProgramAligner.h --- a/align/ExternalProgramAligner.h Fri Jun 26 13:48:52 2020 +0100 +++ b/align/ExternalProgramAligner.h Wed Jul 01 11:41:07 2020 +0100 @@ -42,6 +42,7 @@ private slots: void programFinished(int, QProcess::ExitStatus); + void logStderrOutput(); private: Document *m_document;