Модуль C в Python — Получить путь к среде выполнения?

#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. Я действительно не понял, что вы имеете в виду. Но достаточно знать каталог и имя файла, чтобы получить полный путь.