如何在 Qt 中获取输出 system() 命令?
Posted
技术标签:
【中文标题】如何在 Qt 中获取输出 system() 命令?【英文标题】:how to get output system() command in Qt? 【发布时间】:2013-10-16 17:30:13 【问题描述】:我在 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。它会在输出可用时向您发出信号,让您轻松获得标准输出和标准错误。 【参考方案1】:也可以直接从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]
【讨论】:
【参考方案2】:你要执行的是一个shell命令。您需要将其传递给外壳。使用 QProcess 运行以下命令:
/bin/bash -c "your_command | with_pipes > and_redirects"
【讨论】:
【参考方案3】:我刚刚为此创建了一个 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。如果您正在编写开源程序,请随时在您的应用程序中使用它。
【讨论】:
以上是关于如何在 Qt 中获取输出 system() 命令?的主要内容,如果未能解决你的问题,请参考以下文章
如何将os.system()输出存储在python中的变量或列表中[重复]
inux C程序中获取shell脚本输出(如获取system命令输出)