Есть ли способ получить источник файла Python при выполнении в файле Python?

Предполагая, что у вас есть файл Python, как это

#python
#comment
x = raw_input()
exec(x)

Как вы можете получить источник всего файла, включая комментарии с exec?

3 ответа

Это именно то, что inspect Модуль есть для. См. Раздел " Получение исходного кода ", в частности.

Если вы пытаетесь получить источник работающего в данный момент модуля:

thismodule = sys.modules[__name__]
inspect.getsource(thismodule)

Если вы не совсем обязаны использовать exec, это просто:

print open(__file__).read()

Не уверен, для чего вы планируете использовать это, но я использовал это, чтобы уменьшить объем работы, необходимой для поддержки моих сценариев командной строки. Я всегда использовал open (_file_, 'r')

'''
Head comments ...
'''
.
.
. 
def getheadcomments():
    """
    This function will make a string from the text between the first and 
    second ''' encountered. Its purpose is to make maintenance of the comments
    easier by only requiring one change for the main comments. 
    """
    desc_list = []
    start_and_break = "'''"
    read_line_bool = False
    #Get self name and read self line by line. 
    for line in open(__file__,'r'):
        if read_line_bool:
            if not start_and_break in line:
                desc_list.append(line)
            else:
                break    
        if (start_and_break in line) and read_line_bool == False:
            read_line_bool = True
    return ''.join(desc_list)
.
.
.
parser = argparse.ArgumentParser(description=getheadcomments())  

Таким образом, ваши комментарии в верхней части программы будут выводиться при запуске программы из командной строки с параметром --help.

Другие вопросы по тегам