QProcess 可以启动程序但不能启动 python(命令行)

Posted

技术标签:

【中文标题】QProcess 可以启动程序但不能启动 python(命令行)【英文标题】:QProcess can launch programs but not python (command line) 【发布时间】:2017-07-24 14:07:40 【问题描述】:

以下代码无法启动 python 命令行。

QProcess *myProcess = new QProcess(this);
myProcess->start("\"C:\\Program Files\\Python27\\python.exe\"");

如果我用(例如)替换 python27

myProcess->start("\"C:\\Program Files\\Notepad++\\notepad++.exe\"")

记事本打开。为什么我的程序可以启动记事本,但不能启动 Python 命令行?

我尝试按照here 的建议使用 startDetached() ,但这并没有什么不同。

QProcess::Error() 给我错误 5:未知错误。

【问题讨论】:

你到底想用python做什么? python.exe 是解释器二进制文件,所以如果你想运行一个特定的 .py 脚本,你需要将它作为参数传递给 python,但是从命令行(运行 cmd.exe 行而不是 python 与 'python script.py' as论据) @t020608 你确定python.exe 运行正常吗?喜欢双击它? @Lucian 现在我只是想看看我是否可以打开 python。从长远来看,我想执行在我的 Qt GUI 中创建的 python 脚本(最好能够监控进度并暂停脚本)。那我应该使用命令行吗? 我刚刚在 Qt5.5 和 python 3.6 中运行了你的代码。 myProcess->start(...) 什么都没有发生,但 QProcess::startDetached(...) 工作。你确定路径是正确的吗?也许python安装在C:\Program Files (x86)而不是C:\Program Files。你确定你没有犯任何拼写错误吗? @pschill 我确定我的路径是正确的,因为我可以使用system("start C:\\Python27\\python.exe"); 启动 python(我更改了 Python27 文件夹的位置) 【参考方案1】:

如果您只想使用“python 控制台”,则必须使用 windows 中的 cmd.exe 应用程序 您必须在 PATH 中有 python,以便 Windows 控制台知道从哪里获取它。 所以,你可以试试:QProcess::startDetached("cmd", "python")..查看更具体的语法细节here

【讨论】:

我试过这个,但打开命令提示符也不起作用。我已经尝试过 QProcess::startDetached("cmd.exe") 以及完整路径作为参数(“C:\Windows\system32\cmd.exe”)。任何想法为什么它在 this person 工作时对我不起作用?? @t020608 如果你是 64 位,你可以试试 "C:\Windows\SysWOW64\cmd.exe" .... 检查***.com/questions/39732079/…【参考方案2】:

我似乎误解了当您启动命令行时会发生什么。我期待 python 命令行或命令提示符窗口打开。

事实证明,如果我像这样将命令作为参数 start() 传递:

 myProcess->start("cmd.exe /C python C:\\Users\\SP4\\Desktop\\helloworld.py");

命令提示符运行我的 python 脚本,我使用以下命令获取输出(“Hello World”):

QString output = myProcess->readAllStandardOutput();

所有这些都发生在后台,您实际上看不到命令​​行窗口打开并打印出“Hello, World”。

如果我误解了什么,请纠正我。

【讨论】:

以上是关于QProcess 可以启动程序但不能启动 python(命令行)的主要内容,如果未能解决你的问题,请参考以下文章

QT软件开发: QProcess启动进程完成交互并获取输出

Qt QProcess启动和关闭外部程序

QProcess:使用输入功能启动 MATLAB 终端会话

QProcess 无法启动进程:未找到进程

qt中如何启动其他应用程序(如果不成功,还有许多原因即QProcess::ProcessError可供分析)

Qt通过QProcess启动进程并传递命令行参数