2016-10-04 111 views
0

我有一個用C++編寫的程序。我想從中獲得完整的python可執行文件路徑。例如,如果我打開Windows命令提示符(cmd.exe)並鍵入python,它將使用PATH的python可執行文件。所以,我想有一個功能get_exec_path("python") whick返回類似C:\Python27\python.exeC:\Python27\在我的PATH。 我需要這個從C++代碼調用python腳本。在C++中嵌入python對我而言是一個壞主意。我曾經這樣稱呼它:從C++獲取python可執行文件的完整路徑

std::system("start \"\" /WAIT python myscript.py --arg1 arg1 --arg2 arg2") 

但這種方法顯示命令提示符窗口,我想要某種背景工作。爲此,我使用了第二個參數"C:\Python27\python.exe myscript.py --arg1 arg1 --arg2 arg2"CreateProcess。所以,我需要從PATH變量完整路徑到python可執行文件。

+1

你能表現你對這個問題的嘗試? –

+0

你爲什麼覺得你需要這個? –

+0

@LightnessRacesinOrbit我需要從C++代碼中調用python腳本。在C++中嵌入python對我來說是個壞主意。 – sashadereh

回答

2

你在問錯誤的問題。

,而不是試圖繞過外殼(和重塑PATH變量,而這樣做),通過傳遞正確的標誌,以start隱藏的命令提示符窗口用它來你的優勢

the documentation,這是/b

啓動應用程序,而無需打開新的命令提示符窗口。

+0

始終**閱讀所用工具的文檔**,瞭解如何充分利用它們。猜測編程不起作用。 –

+0

不幸的是,它是隱藏python解釋器窗口,但不是由std :: system調用的windows命令提示符,所以你的解決方案對我不好。 – sashadereh

+0

@sasha你也可以閱讀[CreateProcess的文檔](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v = vs.85).aspx)來發現它_does_在搜索路徑中查找。不要停止研究。 –

0

有一些解決方案,可以幫助你。

  • 從Windows註冊表中獲取使用C++工具。將{ver}替換爲實際版本。 「3.5」在我的情況。

    HKCU \ SOFTWARE \ Python的\ PythonCore \ {版本} \安裝路徑\ ExecutablePath

  • 使用where.exe實用程序執行路徑搜索。它就像linux「which」一樣工作。

    C:\用戶\管理員>其中蟒蛇
    C:\用戶\ ADMIN \應用程序數據\本地\程序\ Python的\ Python35 \ python.exe

0

您一個顯示一個Windows的Python路徑,這個答案將專注於Windows,並且是而不是便攜式。

從shwlapi某個功能正是你想要的:

BOOL PathFindOnPath(
    _Inout_ LPTSTR pszFile, 
    _In_opt_ LPCTSTR *ppszOtherDirs 
); 

documentation說:

由pszFile指定的文件PathFindOnPath搜索。如果沒有在ppszOtherDirs中指定目錄,它將嘗試通過搜索標準目錄(如System32)和PATH環境變量中指定的目錄來查找該文件。

尋找蟒蛇。exe文件,你可以這樣做:

char path[MAX_PATH] = "python.exe"; 
BOOL cr = ::PathFindOnPathA(path, NULL); 
if (! cr) { 
    //process error ... 
} 
// path now contains the full path 

請注意:您必須包括shlwapi.h和鏈接shlwapi.lib ...