【问题标题】:QProcess::readAllStandardOutput() and line feedsQProcess::readAllStandardOutput() 和换行
【发布时间】:2019-01-31 00:47:56
【问题描述】:

我正在打印来自 QProcess::readAllStandardOutput()(在 Ubuntu 18.04 上)的输出,否则它工作正常,但 \n 字符实际上不是换行符,并且以某种方式作为字符串的一部分出现:

/usr/local/lib/libpcl_search.so\n/usr/local/lib/libpcl_sample_consensus.so\n/usr/local/lib/libpcl_io.so\n/usr/local/lib/libpcl_segmentation.so\n/usr/local/lib/libpcl_common.so\n/usr/local/lib/libboost_random.so\n/usr/local/lib/libboost_math_tr1l.so

这是运行find / -name "*so" 命令时的输出,QProcess 打印如下:

qDebug() << m_process->readAllStandardOutput();

我猜这是编码问题..?

【问题讨论】:

  • 请编辑您的问题以显示您如何阅读/查看来自QProcess 的数据。
  • 已编辑。不知道为什么投反对票。
  • 请记住,根据命令您将得到答案,另一方面 readAllStandardOutput() 返回 QByteArray() 而不是 QString() 所以您可能会得到 \n
  • 是的,但是看看我自己发布的答案。
  • 正如@eyllanesc 所说,QByteArrayqDebug operator&lt;&lt; 重载将转义某些字符,例如换行符等。因此您会看到输出。

标签: c++ ubuntu qt5 qstring qbytearray


【解决方案1】:

问题是因为 QDebug 将显示结束线和类似字符,因为你传递给他们一个 QByteArray,如果你想看到你想要的输出然后使用 qPrintable:

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess process;

    QObject::connect(&process, &QProcess::readyReadStandardOutput, [&process](){
        qDebug()<< qPrintable(process.readAllStandardOutput());
    });
    process.start("find / -name \"*so\"");

    return a.exec();
}

输出:

/snap/core/4917/lib/crda/libreg.so
/snap/core/4917/lib/i386-linux-gnu/ld-2.23.so
/snap/core/4917/lib/i386-linux-gnu/libBrokenLocale-2.23.so
/snap/core/4917/lib/i386-linux-gnu/libSegFault.so
/snap/core/4917/lib/i386-linux-gnu/libanl-2.23.so
/snap/core/4917/lib/i386-linux-gnu/libc-2.23.so
/snap/core/4917/lib/i386-linux-gnu/libcidn-2.23.so
...

【讨论】:

  • 我仍然想知道为什么我在使用startDetached() 启动进程时没有这个问题。在这种情况下,它也会得到一个 QByteArray。
  • 这取决于您的通话方式,您可以显示该案例的minimal reproducible example
  • 只需将代码中的 process.start() 替换为 process.startDetached()
  • 当我看到源代码时,实现是不同的,也许这会产生差异。
  • @juzzlin in startDetached 印象被直接发送到控制台,评论 qDebug() 你会看到它继续打印。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多