运行 一个 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 资源系统和 :/
语法一无所知。它期望第一个参数是操作系统理解的磁盘路径。
两个选择:
只需将myScript.sh文件作为单独的文件发送并直接执行即可。 (在尝试使脚本成为资源之前,您观察到的工作)。如果您没有使用 compiled 资源,它很可能已经是一个磁盘文件。只需在文件的绝对路径上调用 popen 而不是使用 :/
语法。
编写代码从资源中提取 myScript.sh 文本文件并将其保存到本地磁盘。然后对该保存的文件调用 popen。
其运行ning脚本文件作为qt资源。您可能会添加参数 运行.
QStringList arg("-c");
QFile file(":/scriptFile.sh");
arg << file.readAll();
process->start("sh", arg);
这里是 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 资源系统和 :/
语法一无所知。它期望第一个参数是操作系统理解的磁盘路径。
两个选择:
只需将myScript.sh文件作为单独的文件发送并直接执行即可。 (在尝试使脚本成为资源之前,您观察到的工作)。如果您没有使用 compiled 资源,它很可能已经是一个磁盘文件。只需在文件的绝对路径上调用 popen 而不是使用
:/
语法。编写代码从资源中提取 myScript.sh 文本文件并将其保存到本地磁盘。然后对该保存的文件调用 popen。
其运行ning脚本文件作为qt资源。您可能会添加参数 运行.
QStringList arg("-c");
QFile file(":/scriptFile.sh");
arg << file.readAll();
process->start("sh", arg);