gpt4 book ai didi

c++ - Qt C++ - 构造带双引号的 QStringlist

转载 作者:行者123 更新时间:2023-11-30 05:10:34 26 4
gpt4 key购买 nike

我需要一些帮助来解决一些非常简单但一直无法正常工作的问题:

我正在尝试构建这个QStringList:

-c "import imp; foo = imp.load_source('myTest', '/home/John/fw/demos/myTest.py'); foo.myTestFunction();"

注意引号!但我已经尝试了无数的事情,比如:

QStringList params;
params << "-c \"import imp; foo = imp.load_source('myTest', '/home/John/fw/demos/myTest.py'); foo.myTestFunction() \" ";

但这似乎行不通!

发生了什么:

我正在尝试从我的 Qt gui 运行 python 脚本。我可以在使用终端时运行脚本,如下所示:

$ python2 -c "import imp; foo = imp.load_source('myTest', '/home/John/fw/demos/myTest.py'); foo.myTestFunction();"
output: this is the python script

我现在正尝试在我的 Qt C++ 代码中复制它,如下所示:

{
QProcess p;
QStringList params;
params << "-c \"import imp; foo = imp.load_source('myTest', '/home/John/fw/demos/myTest.py'); foo.myTestFunction() \" ";
qDebug()<<params;
p.start("python2 ", params);
p.waitForFinished(-1);
QString p_stdout = p.readAll();
qDebug()<<p_stdout;
qDebug()<<"ran py script";

}

但它只输出:

    "-c \"import imp; foo = imp.load_source('myTest', '/home/John/fw/demos/myTest.py'); foo.myTestFunction() \" "
""
ran py scrip

这是脚本:

#!/usr/bin/env python2

import os
import numpy as np

def myTestFunction():
print('output: this is the python script')
return 55

if __name__=='__main__':
a = myTestFunction()
print('returned value: '+ str(a))

我预计至少会看到“55”而不是像“”这样的空字符串。有人可以帮我吗?

最佳答案

当程序以单独的参数运行时,它返回一个空字符串,我仍然不明白原因。但是,如果我们将所有内容连接在一个命令中,它就能够正确执行应用程序:

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

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

QProcess p;
QString cmd("/usr/bin/python2 -c \"import imp; foo = imp.load_source(\'myTest\', \'/home/qhipa/myTest.py\'); foo.myTestFunction()\"");
p.start(cmd);
qDebug()<< p.arguments();
if (!p.waitForFinished(-1))
qDebug() << "Make failed:" << p.errorString();
else
qDebug() << "Make output:" << p.readAll();
qDebug()<<"ran py script";
return a.exec();
}

输出:

("-c", "import imp; foo = imp.load_source('myTest', '/home/qhipa/myTest.py'); foo.myTestFunction()")
Make output: "output: this is the python script\n"
ran py script

如果我们删除引号也有效,似乎在参数的开头没有必要放置引号,即使命令需要它也是如此。

QProcess p;
QStringList params = QStringList()<<"-c"<<
"import imp; foo = imp.load_source(\'myTest\', \'/home/qhipa/myTest.py\'); foo.myTestFunction()";
p.start("/usr/bin/python2", params);
qDebug()<< p.arguments();
if (!p.waitForFinished(-1))
qDebug() << "Make failed:" << p.errorString();
else
qDebug() << "Make output:" << p.readAll();
qDebug()<<"ran py script";

关于c++ - Qt C++ - 构造带双引号的 QStringlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45608789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com