使用参数作为Qt资源运行Bash脚本

问题描述 投票:1回答:2

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

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);
c++ bash qt qt-creator
2个回答
3
投票

使用Qt资源路径格式调用popen将无法达到预期效果。

你有效地尝试调用是这样的:

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

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

两种选择:

  1. 只需将myScript.sh文件作为单独的文件发送并直接执行即可。 (在您尝试将脚本作为资源之前,您观察到的工作情况)。如果您没有使用编译资源,则很可能它已经是磁盘文件。只需在文件的绝对路径上调用popen,而不是使用:/语法。
  2. 编写代码以从资源中提取myScript.sh文本文件并将其本地保存到磁盘。然后在该保存的文件上调用popen。

0
投票

它的运行脚本文件作为qt资源。你可以添加参数这个运行。

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

© www.soinside.com 2019 - 2024. All rights reserved.