我有一个用C++写的程序。我想从它获得通向python可执行文件的完整路径。例如,如果我打开Windows命令提示符(cmd.exe)并键入python,它将使用来自PATH
的python可执行文件。因此,我希望有一个函数get_exec_path("python")
返回类似于C:\Python27\python.exe
的东西。C:\Python27\
在我的PATH
里。我需要这个从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"
中使用了"C:\Python27\python.exe myscript.py --arg1 arg1 --arg2 arg2"
。因此,我需要从PATH
变量获得python可执行文件的完整路径。
发布于 2016-10-04 11:57:53
你问错问题了。
不要试图绕过shell (并在此过程中重新创建PATH
变量),而是通过将适当的标志传递给start
以隐藏命令提示符窗口,从而使其成为您的优势。
根据文献资料的说法,那是/b
启动应用程序而不打开新的命令提示符窗口。
发布于 2016-10-04 12:15:44
有一些解决办法,可以帮助你。
发布于 2016-10-04 12:50:35
当您显示Windows时,这个答案将集中于,而不是可移植的。
精明的函数可以做你想做的事情:
BOOL PathFindOnPath(
_Inout_ LPTSTR pszFile,
_In_opt_ LPCTSTR *ppszOtherDirs
);
它的文档说:
PathFindOnPath搜索pszFile指定的文件。如果没有在ppszOtherDirs中指定目录,则尝试通过搜索标准目录(如System32 )和PATH环境变量中指定的目录来查找文件。
要查找python.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 .
https://stackoverflow.com/questions/39851169
复制相似问题