如何在Qt中获取output system()命令?

时间:2013-10-16 17:30:13

标签: qt system qprocess

我在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()命令获得输出。

3 个答案:

答案 0 :(得分:21)

您也可以直接从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]

答案 1 :(得分:1)

您要执行的是 shell命令。您需要将它传递给shell。使用QProcess运行以下命令:

/bin/bash -c "your_command | with_pipes > and_redirects"

答案 2 :(得分:0)

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

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

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

  • OutputWindow.cpp
  • output-window.ui(Qt设计器描述文件)

截图:

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

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

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