检索 QProcess 的环境变量

Nic*_*ick 5 c++ qt

我想在 QProcess 中运行环境脚本,然后读取环境(作为 QStringList)以在此环境中启动其他脚本。

如果我启动 env 脚本并读取环境,我总是得到一个空的 QStringList。有没有办法读出 QProcess 的环境?

我还尝试首先启动环境脚本并在同一个 QProcess 对象上启动实际脚本,但这也无济于事。

Pio*_*ost 6

如果您能够重写在 C++ 中设置环境的脚本,您可以自己创建环境并使用
voidQProcess::setProcessEnvironment ( const QProcessEnvironment & environment ) 方法设置它,如方法文档中给出的示例所示:

 QProcess process;
 QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
 env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
 env.insert("PATH", env.value("Path") + ";C:\\Bin");
 process.setProcessEnvironment(env);
 process.start("myapp");
Run Code Online (Sandbox Code Playgroud)

更新

如果你不能使用上述方法,你可以尝试像这样使用 cmd.exe;

#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QProcess* proc = new QProcess();
    proc->start("cmd.exe /c \"call env.bat && script.bat\"");

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

拥有包含此内容的 env.bat

set abc=test
Run Code Online (Sandbox Code Playgroud)

和带有此内容的 script.bat

echo %abc% > a.txt
Run Code Online (Sandbox Code Playgroud)

运行上面的内容会创建一个包含此内容的 .txt 文件

test 
Run Code Online (Sandbox Code Playgroud)