启动使用来自 QT Gui 应用程序的环境变量的控制台应用程序
Posted
技术标签:
【中文标题】启动使用来自 QT Gui 应用程序的环境变量的控制台应用程序【英文标题】:Launch console application which uses environment variables from QT Gui application 【发布时间】:2013-05-31 14:03:37 【问题描述】:我目前正在使用 QT4.8 制作一个 GUI,它基本上需要启动一个控制台应用程序。但是,因为这个控制台应用程序试图获取一些环境变量,我似乎无法让它工作。 我显然在使用 QProcess 并尝试了几种解决方案:
process->start("./yarpbridge", QStringList() << "--from" << "tmp.ini");
此解决方案不会生成控制台窗口,此外,通过将输出重定向到qDebug()
,它会打印与缺少环境变量相对应的错误。
process->start("gnome-terminal", QStringList() << "-e" << "zsh" << "-c" << "\"./yarpbridge --from tmp.ini"\");
此解决方案确实会启动一个控制台窗口,但它仍然会显示错误消息,因为在打开控制台窗口时可能没有咨询 .zshrc。
您是否有一个解决方案可以让我这样做,甚至更好,不仅适用于“gnome-terminal”和“zsh”用户?
非常感谢,
【问题讨论】:
【参考方案1】:您可以发布您遇到的错误吗?
这很奇怪,因为您不需要启动终端即可运行 CLI 程序,也许在发布您的错误消息后我可能会知道问题所在。
你也可以试试这个:
#include <stdio.h>
char buffer[1024];
FILE* fd = popen("/path/to/yarpbridge", "r");
if (fd == NULL)
// Error: do something
while(NULL != fgets(buffer, sizeof(buffer), fd))
QString s(buffer);
s = s.stripWhiteSpace();
// s contains the output, pretty much as readAllStandardOutput() in QProcess
// don't forget to close file.
close (fd);
【讨论】:
我宁愿不使用 C 标准...当未定义环境变量时,错误输出与我的程序非常相关。但是,我想我已经通过在交互模式下运行 shell(-i 标志)来解决这个问题。以上是关于启动使用来自 QT Gui 应用程序的环境变量的控制台应用程序的主要内容,如果未能解决你的问题,请参考以下文章