在Windows XP中从C ++程序执行Python脚本

时间:2015-06-12 16:31:01

标签: python c++ escaping shellexecute

我正在尝试从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脚本从未执行过。

2 个答案:

答案 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;

并填写了目录参数,现在正在使用。