使用 QProcess 调用带有参数的外部程序

Posted

技术标签:

【中文标题】使用 QProcess 调用带有参数的外部程序【英文标题】:Using QProcess to call an external program, with arguments 【发布时间】:2020-09-25 15:05:15 【问题描述】:

我有一个 exe 文件夹位于一个文件夹中,然后我的所有配置文件位于另一个文件夹中。为了运行程序:

我需要将终端指向配置文件夹 然后运行带有参数的 exe 文件夹。

如下所示,我使用系统调用可以正常工作,但我需要一种与系统无关的方法。

void MainWindow::on_pushButton_clicked()

    std::system("cd Path_To_ConfigFolder & Absolute_Path_To_Exe RunFile.txt > logfile.txt");

上面的效果很好。虽然它只适用于 Windows .. 所以我对使用 QProcess 进行了一些研究来创建一种更与系统无关的方式.. 无论我尝试什么,我似乎都无法让它工作。见下文:

void MainWindow::on_pushButton_clicked()

    QProcess p;
    QStringList params;
    p.setWorkingDirectory("Path_To_ConfigFolder");
    params << " RunFile.txt > logfile.txt";
    p.start("Absolute_Path_To_Exe", params);
    p.waitForFinished(-1);

注意:对于上面的示例(使用 QProcess),我的所有路径都是 \\,并且我的所有路径都是正确的。

我在这里做错了什么?

【问题讨论】:

您当然需要检查所有可能的错误。见***.com/questions/60969455/… 【参考方案1】:

如果可执行文件位于与系统无关的本地文件夹中,则可执行文件的名称将以".\" 开头。 Linux shell 和 PowerShell 需要它。

">" - 输出重定向不是进程的参数,它不起作用。您必须将输出通道重定向到您的或辅助进程。

p.setStandardOutputFile("log_file.txt")

【讨论】:

感谢您的帮助@Swift。如何定向到 p.start() 中的输出文件? @TBCoder92 看看QProcess::setStandardOutputFile p.setStandardOutputFile(AbsPathToLogFile.txt) 放在p.start() 上方,并在RunFile.txt 之前删除空格。完成这些工作,感谢您的帮助!

以上是关于使用 QProcess 调用带有参数的外部程序的主要内容,如果未能解决你的问题,请参考以下文章

Qt技巧:QProcess与外部程序的调用

QT调用外部程序

QProcess与外部程序的调用(可以通过设置管道来交互)

QT下的QProcess调用外部程序

类构造函数中指向 QProcess 对象的指针使 qt GUI 崩溃

Qt5 QProcess 处理带有“特殊”字符的参数