使用 Python C 扩展获取当前工作目录
Get Current Working Directory With Python C Extension
我正在构建一个可以加载图像的 Python C 扩展。
要加载某个图像,用户必须写入该图像的文件路径。
问题是用户必须键入整个文件路径,即使图像与他们的模块位于同一目录中也是如此。
Python 本身有一些有用的工具,如 os.path
和 pathlib
可以帮助您找到当前模块的路径。
我搜索了 Python C API,但似乎找不到任何与在 C 中查找当前工作目录相关的工具。
我可以做什么 - 在 C 中 - 获取用户模块目录的路径?
有没有Python.h函数?
我采取了错误的方法吗?
python c api 可以与许多您可以在 Python 中做的事情进行交互。
在 Python 你会怎么做?您会 import os
并调用 os.getcwd()
,对吗?
原来你可以在 c api.
中做同样的事情
PyObject *os_module = PyImport_ImportModule("os");
if (os_module == NULL) { //error handling
return NULL;
}
PyObject* cwd = PyObject_CallMethod(os_module, "getcwd", NULL);
if (cwd == NULL) { //error handling
return NULL;
}
char* result = PyUnicode_AsUTF8(cwd);
然后当您完成模块或一般的任何 pyobject 时,请记住对其调用 Py_DECREF()
。
我正在构建一个可以加载图像的 Python C 扩展。 要加载某个图像,用户必须写入该图像的文件路径。
问题是用户必须键入整个文件路径,即使图像与他们的模块位于同一目录中也是如此。
Python 本身有一些有用的工具,如 os.path
和 pathlib
可以帮助您找到当前模块的路径。
我搜索了 Python C API,但似乎找不到任何与在 C 中查找当前工作目录相关的工具。
我可以做什么 - 在 C 中 - 获取用户模块目录的路径? 有没有Python.h函数? 我采取了错误的方法吗?
python c api 可以与许多您可以在 Python 中做的事情进行交互。
在 Python 你会怎么做?您会 import os
并调用 os.getcwd()
,对吗?
原来你可以在 c api.
中做同样的事情PyObject *os_module = PyImport_ImportModule("os");
if (os_module == NULL) { //error handling
return NULL;
}
PyObject* cwd = PyObject_CallMethod(os_module, "getcwd", NULL);
if (cwd == NULL) { //error handling
return NULL;
}
char* result = PyUnicode_AsUTF8(cwd);
然后当您完成模块或一般的任何 pyobject 时,请记住对其调用 Py_DECREF()
。