簡體   English   中英

在Windows XP中從C ++程序執行Python腳本

[英]Executing Python Script from C++ program in Windows XP

我正在嘗試從C ++程序執行python腳本。 我遇到的問題是我無法執行我的python腳本。

如果我通過將lpParameter值設置為NULL來取出它,則一切正常,我的程序啟動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腳本從未執行過。

並非真正的答案,但評論太久。

這種在新窗口中執行的問題是,一旦程序結束窗口就會關閉。 當打開一個窗口時,從啟動程序的角度來看,可能一切都很好。

我的建議是在程序結束后使用cmd /k強制窗口保持打開狀態:

shExecInfo.lpFile = "cmd";
shExecInfo.lpParameters = "/k C:\\Python25\\python.exe \"C:\\Documents and Settings\\John Williamson\\My Documents\\MyPrograms\\PythonScripts\\script.py\"";

至少如果某個地方有錯誤,您將有機會看到它。

原來問題出在權限和設置此參數上:

shExecInfo.lpVerb = "runas";

相反,我離開了

shExecInfo.lpVerb = NULL;

並填寫了directory參數,現在可以使用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM