2013-05-10 3 views
0

У меня есть служебный модуль в Python, который должен знать имя приложения, в котором он используется. Эффективно это означает имя сценария питона верхнего уровня, который был вызван для запуска приложения (то есть тот, где __name == "__ main__" будет правдой). __name__ дает мне имя текущего файла python, но как мне получить имя самого верхнего в цепочке вызовов?Как получить имя самого большого (входного) скрипта в python?

+4

'sys.argv [0]' может быть? –

ответ

4

Имея переключить запрос в Google, чтобы «как найти процесса имя из питона» против как найти «имя сценария верхнего уровня», я нашел this overly thorough treatment of the topic. Сводная информация о том, что:

import __main__ 
import os 

appName = os.path.basename(__main__.__file__).strip(".py") 
+0

В некоторых случаях полоса не совсем правильная: '' pretend_example_silly.py ".strip (". Py ")' дает '" retend_example_sill "'. 'os.path.basename (__ main __.__ file __). split (". ") [0]' может быть лучше эвристическим – FredL

1

Для этого вы можете использовать модуль inspect. Например:

a.py:

#!/usr/bin/python 

import b 

b.py:

#!/usr/bin/python 

import inspect 

print inspect.stack()[-1][1] 

Запуск python b.py отпечатки b.py. Запуск python a.py отпечатки a.py.

Тем не менее, я хотел бы добавить предложение sys.argv[0] как более разумное и идиоматическое предложение.

Смежные вопросы