使用CreateProcess从c++调用Python文件

2024-09-30 20:32:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用CreateProcess()在MFC按钮上运行python脚本文件,以便使用管道实时捕获进程的输出。你知道吗

CString sCmd = "Cmd.Exe";
CString sParms = " /c python.exe C:\\WinApp\\Debug\\printx.py";
BOOL fRet = ExecAndProcessOutput(sCmd, sParms);


BOOL ExecAndProcessOutput(LPCSTR szCmd, LPCSTR szParms)
{
    SECURITY_ATTRIBUTES rSA = { 0 };
    rSA.nLength = sizeof(SECURITY_ATTRIBUTES);
    rSA.bInheritHandle = TRUE;

    HANDLE hReadPipe, hWritePipe;
    CreatePipe(&hReadPipe, &hWritePipe, &rSA, 25000);

    PROCESS_INFORMATION rPI = { 0 };
    STARTUPINFO         rSI = { 0 };
    rSI.cb = sizeof(rSI);
    rSI.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    rSI.wShowWindow = SW_SHOWNORMAL;// SW_HIDE;  // or SW_SHOWNORMAL or SW_MINIMIZE
    rSI.hStdOutput = hWritePipe;
    rSI.hStdError = hWritePipe;

    CString sCmd; 
    sCmd.Format("\"%s\" %s", (LPCSTR)szCmd, (LPCSTR)szParms);

    BOOL fRet = CreateProcess(NULL, (LPSTR)(LPCSTR)sCmd, NULL,NULL, TRUE, 0, 0, 0, &rSI, &rPI);
    if (!fRet) 
    {
        return(FALSE);
    }
}

总之,将参数传递给Createprocess的第二个参数是:

"Cmd.Exe"  /c python.exe C:\WinApp\Debug\printx.py

由于某些原因,当我运行这个代码createprocess时,我没有得到任何错误作为返回参数。但是python文件名为-打印x.py没有跑。你知道吗

感谢你在这方面的帮助。你知道吗

谢谢你


Tags: pycmdswexersanullboolrsi