#python #c
Вопрос:
В обычном исполнителе C я могу получить полный путь к исполнителю с помощью
// Read path to executable
char cpath[PATH_MAX];
ssize_t count = readlink("/proc/self/exe", cpath, sizeof cpath);
Но если я вызову его в скрипте Python, вернется то же самое
/usr/bin/python3.6
Что, если бы я хотел получить полную /usr/bin/python3.6 /home/user/myscript.py
Как я могу получить доступ к переменной?
Я хочу, чтобы модуль C знал фактическое местоположение выполняемого скрипта или его собственное местоположение (файл.so).
Ответ №1:
Почти то же самое.
ifstream cmdline("/proc/self/cmdline");
std::string cpath;
std::getline(cmdline, cpath);
Комментарии:
1. Это объединяет всю команду в одну строку. например. `/home/user/.pyenv/bin/python3/home/user/myscript.py
2. Эта единственная строка содержит аргументы, разделенные нулевым символом.
3. да, этот нулевой символ надирал мне задницу в течение 1 часа
Ответ №2:
Код выглядит следующим образом:
from pathlib import Path
path = Path("given path")
complete_path = path.absolute()
print(complete_path)
Комментарии:
1. На самом деле, мне нужен способ, чтобы библиотека знала местоположение своего собственного файла .so
2. Я действительно не понял, что вы имеете в виду. Но достаточно знать каталог и имя файла, чтобы получить полный путь.