2016-10-04 219 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 ...

相关问题