我在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() 命令获取输出。
您也可以直接从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]
你要执行的是一个 shell 命令。您需要将其传递给外壳。使用 QProcess 运行以下命令:
/bin/bash -c "your_command | with_pipes > and_redirects"
我刚刚为此做了一个C++类。它是QDirStat的一部分,但它可以很容易地独立使用:
https://github.com/shundhammer/qdirstat/blob/master/src/OutputWindow.h
以及这个网络论坛不允许我链接到的其他文件:
- 输出窗口.cpp
- output-window.ui (Qt designer描述文件)
截图:
https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-cleanup-output.png
如您所见,它甚至带有放大/缩小按钮。您可以将其配置为仅在 stderr 上有输出时才显示,在完成后关闭它,或者仅在花费超过(可配置)超时的时间时才打开它。
许可证是 GPL V2。 如果您正在编写开源程序,请随意在您的应用程序中使用它。