Получить имя текущего скрипта в Python
Я пытаюсь получить имя выполняемого в данный момент Python-скрипта. У меня есть скрипт с названием foo.py
, и я хотел бы сделать что-то вроде этого, чтобы получить имя скрипта:
print(Scriptname)
Как правильно получить имя текущего скрипта в Python?
5 ответ(ов)
Этот код выведет foo.py
при запуске команды python foo.py
, dir/foo.py
при python dir/foo.py
и так далее. Это первый аргумент, передаваемый интерпретатору Python. (Обратите внимание, что после использования py2exe он будет выводить foo.exe
.)
Выше приведенные ответы хороши, но я нашел этот метод более эффективным, используя приведенные результаты. Он возвращает имя файла скрипта, а не путь к нему.
import sys
import os
file_name = os.path.basename(sys.argv[0])
Для современных версий Python (3.4 и выше) более идиоматичным будет использование Path(__file__).name
. Также Path(__file__).stem
позволяет получить имя скрипта без расширения .py
.
На Python 3.5 и выше вы можете просто использовать следующий код для получения имени файла без расширения:
from pathlib import Path
Path(__file__).stem
Дополнительную информацию вы можете найти здесь: https://docs.python.org/3.5/library/pathlib.html#pathlib.PurePath.stem
Например, если у вас есть файл в домашнем каталоге с именем test.py
, содержащий следующий код:
from pathlib import Path
print(Path(__file__).stem)
print(__file__)
При запуске этого скрипта вы получите следующий вывод:
>>> python3.6 test.py
test
test.py
Таким образом, Path(__file__).stem
возвращает имя файла без расширения, а __file__
возвращает полное имя файла с его расширением.
Если вы выполняете необычный импорт (например, это файл с опциями), попробуйте следующий код:
import inspect
print(inspect.getfile(inspect.currentframe()))
Обратите внимание, что этот код вернет абсолютный путь к файлу.
Как изменить порядок столбцов в DataFrame?
Получение текущей даты в формате YYYY-MM-DD в Python
Как заполнить строку в Python пробелами?
Как удалить пакеты, установленные с помощью easy_install в Python?
Использование @property против геттеров и сеттеров