Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также любые проблемы программирования на различных макроязыках и в скриптовых средах)

Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач, Язык программирования Python

Приложение A: Параметры командной строки интерпретатора и переменные окружения

Для вызова интерпретатора Python должна быть набрана командная строка следующего формата:

python [options] [-c command | file | -] [arguments]

Где python — путь к исполняемому файлу интерпретатора (или просто имя, если каталог, в котором он находится, включен в пути поиска), options — опции, command — команда на языке Python, file — файл с программой на языке Python и arguments — список аргументов, передаваемых в sys.argv[1:].

Интерпретатор поддерживает следующие опции:

-d

Выводить отладочную информацию при синтаксическом анализе. Этот режим может быть также включен с помощью переменной окружения PYTHONDEBUG (см. ниже).

-i

После выполнения программы перейти в интерактивный режим с выводом приглашения, даже если стандартный поток ввода интерпретатора не является терминалом. Этот режим может быть также включен с помощью переменной окружения PYTHONINSPECT (см. ниже).

-O

Выполнять оптимизацию генерируемого байт-кода. Оптимизация может быть также включена с помощью переменной окружения PYTHONOPTIMIZE (см. ниже).

-OO

Помимо оптимизации (опция -O) удалить из байт-кода строки документации.

-S

Не импортировать модуль site при инициализации.

-t

Выводить предупреждения о непоследовательном использовании символов табуляции в исходном коде.

-tt

Генерировать исключение TabError при обнаружении непоследовательного использования символов табуляции в исходном коде.

-u

Отключить буферизацию для стандартных потоков вывода и ошибок. Этот режим может быть также включен с помощью переменной окружения PYTHONUNBUFFERED (см. ниже). Отключение буферизации может быть необходимо для CGI-программ.

-U

Считать все строковые литеральные выражения строками Unicode, то есть воспринимать '...' как u'...'. Импортируемые модули, байт-код которых был получен без использования этой опции, будут откомпилированы заново. Возможность задания этой опции присутствует, начиная с версии 1.6.

-v

Выводить отладочную информацию при импортировании модулей. Этот режим может быть также включен с помощью переменной окружения PYTHONVERBOSE (см. ниже).

-x

Игнорировать первую строку исходного кода. Такой режим позволяет задавать способ выполнения программы в его первой строке на платформах, отличных от UNIX.

-X

Использовать строки вместо классов для стандартных исключений. Начиная с версии 1.6, эта опция не поддерживается.

-h

Вывести подсказку и завершить выполнение. Возможность задания этой опции присутствует, начиная с версии 2.0.

-V

Вывести номер версии интерпретатора и завершить выполнение. Возможность задания этой опции присутствует, начиная с версии 2.0.

Кроме того, на работу интерпретатора оказывают влияние значения следующих переменных окружения:

PYTHONDEBUG

Если эта переменная имеет непустое значение, интерпретатор будет выводить отладочную информацию при синтаксическом анализе исходного кода.

PYTHONINSPECT

Если эта переменная имеет непустое значение, интерпретатор после выполнения программы перейдет в интерактивный режим с выводом приглашения, даже если стандартный поток ввода интерпретатора не является терминалом.

PYTHONOPTIMIZE

Если эта переменная имеет непустое значение, интерпретатор будет оптимизировать генерируемый байт-код.

PYTHONUNBUFFERED

Если эта переменная имеет непустое значение, буферизация стандартных потоков вывода и ошибок будет отключена. Отключение буферизации может быть необходимо для CGI-программ.

PYTHONVERBOSE

Если эта переменная имеет непустое значение, интерпретатор будет выводить отладочную информацию при импортировании модулей.

PYTHONSTARTUP

Путь к файлу, который будет выполнен при запуске интерпретатора в интерактивном режиме.

PYTHONPATH

Список каталогов, разделенных символом ‘;', в которых будет производиться поиск модулей перед поиском в путях по умолчанию. Значение этой переменной окружения отражается на значении sys.path (см. описание модуля sys).

PYTHONHOME

Устанавливает альтернативное значение sys.prefix и, возможно, sys.exec_prefix. Значение переменной окружения должно иметь вид ‘prefix[;exec_prefix]' (см. описание модуля sys).

Приложение B: Грамматика языка

Здесь используются следующие обозначения для лексем:

NAME

Имя (идентификатор).

NUMBER

Числовое литеральное выражение.

STRING

Строковое литеральное выражение.

NEWLINE

Символ (или последовательность из двух символов), обозначающий переход на новую строку.

ENDMARKER

Конец файла (потока).

INDENT

Увеличение уровня отступа.

DEDENT

Уменьшение уровня отступа.

Начальные символы грамматики:

single_input

Одна интерактивная инструкция.

file_input

Модуль или последовательность команд, считываемая из файла.

eval_input

Инструкция-выражение, передаваемое функции eval() или ввод, получаемый функцией input().

single_input: NEWLINE |
              simple_stmt |
              compound_stmt NEWLINE

file_input: (NEWLINE | stmt)* ENDMARKER
eval_input: testlist NEWLINE* ENDMARKER

funcdef:        'def' NAME parameters ':' suite
parameters:     '(' [varargslist] ')'
varargslist:    (fpdef ['=' test] ',')*
                ('*' NAME [',' '**' NAME] | '**' NAME) |
                fpdef ['=' test] (',' fpdef ['=' test])*
                [',']
fpdef:          NAME | '(' fplist ')'
fplist:         fpdef (',' fpdef)* [',']

stmt:           simple_stmt | compound_stmt
simple_stmt:    small_stmt (';' small_stmt)* [';']
                NEWLINE
small_stmt:     expr_stmt | print_stmt | del_stmt |
                pass_stmt | flow_stmt | import_stmt |
                global_stmt | exec_stmt | assert_stmt
expr_stmt:      testlist (augassign testlist |
                ('=' testlist)*)
augassign:      '+=' | '-=' | '*=' | '/=' | '%=' | '&='
                | '|=' | '^=' | '<<=' | '>>=' | '**='
print_stmt:     'print' ( [ test (',' test)* [','] ] |
                '>>' test [ (',' test)+ [','] ] )
del_stmt:       'del' exprlist
pass_stmt:      'pass'
flow_stmt:      break_stmt | continue_stmt |
                return_stmt | raise_stmt
break_stmt:     'break'
continue_stmt:  'continue'
return_stmt:    'return' [testlist]
raise_stmt:     'raise' [test [',' test [',' test]]]
import_stmt:    'import' dotted_as_name
                (',' dotted_as_name)* |
                'from' dotted_name 'import'
                ('*' | import_as_name
                (',' import_as_name)*)
import_as_name: NAME [NAME NAME]
dotted_as_name: dotted_name [NAME NAME]
dotted_name:    NAME ('.' NAME)*
global_stmt:    'global' NAME (',' NAME)*
exec_stmt:      'exec' expr ['in' test [',' test]]
assert_stmt:    'assert' test [',' test]
compound_stmt:  if_stmt | while_stmt | for_stmt |
                try_stmt | funcdef | classdef
if_stmt:        'if' test ':' suite
                ('elif' test ':' suite)*
                ['else' ':' suite]
while_stmt:     'while' test ':' suite
                ['else' ':' suite]
for_stmt:       'for' exprlist 'in' testlist ':' suite
                ['else' ':' suite]
try_stmt:       ('try' ':' suite
                (except_clause ':' suite)+
                ['else' ':' suite] |
                'try' ':' suite
                'finally' ':' suite)
except_clause:  'except' [test [',' test]]
suite:          simple_stmt |
                NEWLINE INDENT stmt+ DEDENT

test:           and_test ('or' and_test)* | lambdef
and_test:       not_test ('and' not_test)*
not_test:       'not' not_test | comparison
comparison:     expr (comp_op expr)*
comp_op:        '<' | '>' | '==' | '>=' | '<=' | '<>'
                | '!=' | 'in' | 'not' 'in'| 'is'
                |'is' 'not'
expr:           xor_expr ('|' xor_expr)*
xor_expr:       and_expr ('^' and_expr)*
and_expr:       shift_expr ('&' shift_expr)*
shift_expr:     arith_expr (('<<' | '>>') arith_expr)*
arith_expr:     term (('+' | '-') term)*
term:           factor (('*' | '/' | '%') factor)*
factor:         ('+' | '-' | '~') factor | power
power:          atom trailer* ('**' factor)*
atom:           '(' [testlist] ')' |
                '[' [listmaker] ']' |
                '{' [dictmaker] '}' |
                '‘' testlist '‘' |
                NAME | NUMBER | STRING+
listmaker:      test ( list_for | (',' test)* [','] )
lambdef:        'lambda' [varargslist] ':' test
trailer:        '(' [arglist] ')' |
                '[' subscriptlist ']' | '.' NAME
subscriptlist:  subscript (',' subscript)* [',']
subscript:      '.' '.' '.' | test |
                [test] ':' [test] [sliceop]
sliceop:        ':' [test]
exprlist:       expr (',' expr)* [',']
testlist:       test (',' test)* [',']
dictmaker:      test ':' test (',' test ':' test)*
                [',']

classdef:       'class' NAME ['(' testlist ')'] ':'
                suite
arglist:        (argument ',')* (argument [',']| '*'
                test [',' '**' test] | '**' test)
argument:       [test '='] test

list_iter:      list_for | list_if
list_for:       'for' exprlist 'in' testlist
                [list_iter]
list_if:        'if' test [list_iter]

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.