5

我在 Qt 中使用 system() 命令。我想获得输出并将其展示给用户。我的命令是:

system("echo '" + rootPass.toAscii() + "' | su - root -c 'yum -y install " + packageName.toAscii() + "'");

当我在 QProcess 中使用这个命令时(启动或执行函数),这个命令无法运行,但是如果我可以在 QProcess 中运行这个命令,我可以得到QProcess::readAllStandardOutput()函数的输出。

同样,当我在系统命令中使用“>”将输出保存在文件中时,我会在软件包完全安装后收到输出。像下面这样:

system("echo '" + rootPass.toAscii() + "' | su - root -c 'yum -y install " + packageName.toAscii() + "' > result.out");

是否有关于使用 QProcess 运行此命令的任何想法,或者在编写每一行后立即从 system() 命令获取输出。

4

3 回答 3

25

您也可以直接从QProcess

QProcess process;
process.start(/* command line stuff */);
process.waitForFinished(-1); // will wait forever until finished

QString stdout = process.readAllStandardOutput();
QString stderr = process.readAllStandardError();

如果你不想阻塞你的事件循环,你总是可以使用信号:

readyReadStandardOutput();
readyReadStandardError();

然后调用一个函数readAllStandard[Output/Error]

于 2013-10-16T20:59:46.463 回答
1

您要执行的是一个shell 命令。您需要将其传递给外壳。使用 QProcess 运行以下命令:

/bin/bash -c "your_command | with_pipes > and_redirects"
于 2013-10-16T20:10:40.277 回答
0

我刚刚为此制作了一个 C++ 类。它是 QDirStat 的一部分,但它可以很容易地独立使用:

https://github.com/shundhammer/qdirstat/blob/master/src/OutputWindow.h

以及此网络论坛不允许我链接到的其他文件:

  • 输出窗口.cpp
  • output-window.ui(Qt 设计器描述文件)

截屏:

https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-cleanup-output.png

如您所见,它甚至带有放大/缩小按钮。您可以将其配置为仅在 stderr 上有输出时才显示,在完成时将其关闭,或者仅在时间超过(可配置的)超时时才打开它。

许可证是 GPL V2。如果您正在编写开源程序,请随时在您的应用程序中使用它。

于 2016-01-07T12:53:10.727 回答