【发布时间】:2018-04-18 14:37:54
【问题描述】:
我正在尝试从 Qt 应用程序运行 python 文件,但是我有两个问题。一是它似乎没有启动 python 工具。其次,当我尝试仅使用记事本作为示例进行简单测试时,我注意到当我关闭我的应用程序时记事本也会关闭。我不确定为什么 python 工具没有启动,以及为什么进程不是真正独立于 Qt 应用程序。
else if(QFileInfo(path).isFile() && path.endsWith(".py", Qt::CaseInsensitive))
{
QProcess::startDetached("C:/python27/python.exe", QStringList() << "C:/Users/john/testing.py");
QProcess *proc = new QProcess();
proc->startDetached("notepad.exe");
}
更新 #1:第二次尝试仍然失败...... 我进行了更多研究,甚至尝试了下面的代码,现在它给了我错误:
ImportError: 没有名为站点的模块
这让我很困惑,因为我正在设置环境路径。归根结底,我想做的就是运行如下的 shell 命令,但来自 Qt。
"C:/python27/python.exe" "C:/Users/john/testing.py"
最新代码:
QString program( "C:\\Python27\\python.exe" );
QStringList args = QStringList() << "C:\\Users\\jmartini\\Desktop\\Trash\\testing.py";
QProcess process;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("PYTHONHOME", "C:\\Python27");
env.insert("PYTHONPATH", "C:\\Python27\\Lib");
process.setProcessEnvironment(env);
process.execute(program, args);
【问题讨论】:
-
startDetached 返回 false 以防出错。你检查返回值了吗?
-
奇怪的是这行得通:QProcess::startDetached("notepad.exe", QStringList()
-
您应该提供 QProcess 的规范路径,该路径使用正在运行的操作系统的语法。换句话说,您是否尝试过键入 QProcess::startDetached(C:\\python27\\python.exe") ?
-
@S.Monteleone 我用最新发现更新了问题。
-
很明显,问题在于路径字符串使用了错误的斜杠。现在,关于 python 的抱怨,python 脚本现在位于不同的位置有什么原因吗?是同一个脚本吗?