使用 QProcess 调用带有参数的外部程序
Using QProcess to call an external program, with arguments
我在一个文件夹中有一个 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),我的所有路径都是\
,我所有的路径都是正确的。
我做错了什么?
如果可执行文件位于本地文件夹中,则其名称将以 ".\"
开头 system-agnostic。 Linux shell 和 PowerShell 要求。
">" - 输出重定向不是进程的参数,它不会起作用。您必须将输出通道重定向到您的或辅助进程。
p.setStandardOutputFile("log_file.txt")
我在一个文件夹中有一个 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),我的所有路径都是\
,我所有的路径都是正确的。
我做错了什么?
如果可执行文件位于本地文件夹中,则其名称将以 ".\"
开头 system-agnostic。 Linux shell 和 PowerShell 要求。
">" - 输出重定向不是进程的参数,它不会起作用。您必须将输出通道重定向到您的或辅助进程。
p.setStandardOutputFile("log_file.txt")