Home Articles

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

Asked
Viewed 1066 times
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()命令获得输出 .

3 Answers

  • 20

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

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

    /bin/bash -c "your_command | with_pipes > and_redirects"
    
  • 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 . 如果您正在编写开源程序,请随意在您的应用程序中使用它 .

Related