我正在尝试从C ++程序执行python脚本。我遇到的问题是我无法执行我的python脚本。
如果通过将lpParameter值设置为NULL来取出lpParameter值,一切正常,我的程序启动python终端,然后当我退出python终端时程序结束。
我觉得它与用空格分隔参数的lpParameters字段有关,所以我试图在转义的引号中使用整个python脚本。
#include "windows.h"
#include "shellapi.h"
#include <iostream>
using namespace std;
int main()
{
cout<<"About to execute the shell command";
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = NULL;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = "runas";
shExecInfo.lpFile = "C:\\Python25\\python.exe";
shExecInfo.lpParameters = "\"C:\\Documents and Settings\\John Williamson\\My Documents\\MyPrograms\\PythonScripts\\script.py\"";
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_NORMAL;
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
return 0;
}
当我启动此代码时会发生什么,我的程序运行,快速弹出另一个快速消失的终端,然后我的原始终端说任务完成。实际上,虽然我指定的python脚本从未执行过。
答案 0 :(得分:0)
不是答案,但评论的时间太长了。
在新窗口中执行那些类型的问题,一旦程序结束窗口就关闭了。由于窗口已经打开,从发布程序的角度来看,一切都很好。
我的建议是使用cmd /k
强制窗口在程序结束后保持打开状态:
shExecInfo.lpFile = "cmd";
shExecInfo.lpParameters = "/k C:\\Python25\\python.exe \"C:\\Documents and Settings\\John Williamson\\My Documents\\MyPrograms\\PythonScripts\\script.py\"";
至少如果在任何地方出现错误,您将有机会看到它。
答案 1 :(得分:0)
原来问题在于权限和设置此参数:
shExecInfo.lpVerb = "runas";
相反,我离开了它
shExecInfo.lpVerb = NULL;
并填写了目录参数,现在正在使用。