运行 一个 Bash 带有参数的脚本作为 Qt 资源

Running a Bash Script with arguments as a Qt resource

这里是 Qt 新手 :)。 我目前正在 Qt 中执行 bash 脚本,使用 popen 函数将输出重定向到我的应用程序中的 textBrowser。当我将脚本作为资源添加到我的项目时,它似乎不再执行了?我使用 :/myScript.sh 语法,然后尝试将我的参数添加为 QString。 任何建议将不胜感激!

FILE *in; 
char buff[512]; 
QString args = ":/myScript.sh" + <arguments>; 
QByteArray ba = args.toLatin1(); 
char *temp = ba.data(); 
if(!(in = popen(temp , "r")))
{ 
    exit(1);
}
while(fgets(buff, sizeof(buff), in)!=NULL)
{ 
    ui->txtConsole->append(buff); 
}
ui->progressBar->setValue(50); pclose(in);

使用 Qt 资源路径格式调用 popen 不会执行您期望的操作。

您实际上是在尝试调用这个:

 popen(":/myScript.sh args", "r");

popen 函数对 Qt 资源系统和 :/ 语法一无所知。它期望第一个参数是操作系统理解的磁盘路径。

两个选择:

  1. 只需将myScript.sh文件作为单独的文件发送并直接执行即可。 (在尝试使脚本成为资源之前,您观察到的工作)。如果您没有使用 compiled 资源,它很可能已经是一个磁盘文件。只需在文件的绝对路径上调用 popen 而不是使用 :/ 语法。

  2. 编写代码从资源中提取 myScript.sh 文本文件并将其保存到本地磁盘。然后对该保存的文件调用 popen。

其运行ning脚本文件作为qt资源。您可能会添加参数 运行.

QStringList arg("-c"); QFile file(":/scriptFile.sh"); arg << file.readAll(); process->start("sh", arg);