Выход из командной строки Python

152

Чтобы выйти из командной строки Python, я должен набрать exit (). Если я наберу выход, он говорит

Use exit() or Ctrl-Z plus Return to exit

Обычно, когда вы печатаете exit, вы хотите выйти из программы. Почему интерпретатор выдает мне вышеуказанную ошибку, когда узнает, что я пытаюсь выйти из командной строки? Почему он просто не выходит? Я знаю, что это не имеет значения и это глупый вопрос, но мне любопытно.

Анк
источник
Это может быть связано с тем, как функции часто вызываются ()в конце ... в противном случае это может быть (возможно) переменная ... или какой-то объект ...
summea
верно, но переводчик знает, что я пытаюсь выйти и поэтому печатает это сообщение. в противном случае он напечатал бы сообщение об ошибке. Если он знает, что я пытаюсь выйти, он может просто выйти.
Ank
1
exit или exit () выдает мне ошибку о 20% установок, которые я нашел в мире ... Только CTRL + Z + return последовательно работает.
Пауло Карвалью

Ответы:

37

В моем Python интерпретатор exitна самом деле строка, а не функция - 'Use Ctrl-D (i.e. EOF) to exit.'. Вы можете проверить ваш переводчик, введяtype(exit)

В активном питоне происходит то, что выход - это функция. Если вы не вызовете функцию, она выведет строковое представление объекта. Это поведение по умолчанию для любого возвращаемого объекта. Просто дизайнеры подумали, что люди могут попытаться набрать exit для выхода из интерпретатора, поэтому они сделали строковое представление функции выхода полезным сообщением. Вы можете проверить это поведение, набрав str(exit)или даже print exit.

Дюны
источник
14
Ctrl-Z - это то, что вы делаете в Windows (ну, DOS), где вы выполняете Ctrl-D в Unix-подобных системах.
Карл Кнехтель
@KarlKnechtel Ах, приятно знать. У меня мало опыта программирования на windows.
Дюны
60

Это работает для меня, лучший способ выйти из командной строки Python.

выход()

Шридхар Г.С.
источник
4
Я запутался в этом ответе ... сам вопрос говорит, что они уже знают, что exit()работает, и они хотят знать, почему exitбез паренов не работает. Так что этот ответ просто повторяет часть вопроса и фактически не отвечает на него.
Бен Ли
Я как бы хочу понизить этот ответ за то, что не прочитал вопрос, но я полагаю, что для большинства установок на python это правильно; просто пользователь сказал, что это не работает в их случае, поэтому рекомендовать это кажется ... неправильным.
персона 27
37

Когда вы вводите exitв командной строке, он находит переменную с этим именем и вызывает __repr__(или __str__) на нем. Обычно вы получите такой результат:

<function exit at 0x00B97FB0>

Но они решили переопределить эту функцию, чтобы exitобъект отображал полезное сообщение. Является ли это глупым поведением или нет, это субъективный вопрос, но одна из возможных причин, по которой он не «просто уходит»:

Предположим, вы просматриваете некоторый код в отладчике, например, и один из объектов ссылается на exitфункцию. Когда отладчик пытается вызвать __repr__этот объект для отображения этой функции, программа внезапно останавливается! Это было бы действительно неожиданно, и меры по противодействию этому могут еще больше усложнить ситуацию (например, даже если вы ограничите это поведение командной строкой, что если вы попытаетесь напечатать какой-либо объект, имеющий exitатрибут?)

mgibsonbr
источник
4
В этом случае настоящая функция выхода даже не находится в области видимости, кроме вас import sys, после чего вы вызываете sys.exit () для выхода из интерпретатора.
Майкл Диллон
19

Это сообщение является __str__атрибутомexit

посмотрите на эти примеры:

1

>>> print exit
Use exit() or Ctrl-D (i.e. EOF) to exit

2

>>> exit.__str__()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

3

>>> getattr(exit, '__str__')()
'Use exit() or Ctrl-D (i.e. EOF) to exit'
Моул
источник
19

Я рекомендую вам выйти из интерпретатора Python с помощью Ctrl-D. Это старый код ASCII для конца файла или конца передачи.

Джей Слупески
источник
Похоже, этот метод не работает, если скрипт столкнулся с ошибкой.
blaylockbk
2
Ctrl-Breakработает последовательно в Windows. Ctrl-Dили Ctrl-Zработал в Windows для Python 2.7, 3.4, 3.6. Но в Python 3.7 они перестали работать, и самая короткая последовательность ASCII, которая выходит, есть Ctrl-Z Enter.
Боб Стейн
14

С использованием Anaconda 4.5+ и Python 3.6+ под Windows

Ctrl+Z

или

exit()

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

Ctrl+Break

Если на вашем компьютере нет Breakключа, смотрите здесь .

Шиталь шах
источник
8

Поскольку интерпретатор - это не оболочка, в которой вы предоставляете команды, это - хорошо, - интерпретатор. Вещи, которые вы ему даете, это код Python.

Синтаксис Python таков, что exitсам по себе не может быть ничем иным, как именем объекта. Простая ссылка на объект на самом деле ничего не может сделать (кроме того, что обычно делает цикл read-eval-print; т.е. отображает строковое представление объекта).

Карл Кнехтель
источник
6

Вы можете это исправить.

Ссылка PYTHONSTARTUPна файл Python со следующим

# Make exit work as expected
type(exit).__repr__ = type(exit).__call__

Как это работает?

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

При вводе exit()он оценивается как вызываемый объект типа site.Quitterи вызывает его __call__функцию, которая выходит из системы. Когда вы exitпечатаете, он оценивает тот же вызываемый объект, не вызывая его, печатается объект, который в свою очередь вызывает __repr__объект.

Мы можем воспользоваться этим путем связывания __repr__с __call__и , таким образом , получить ожидаемое поведение на выходе из системы , даже когда мы набираем exitбез скобок.

akuhn
источник
4
Они приложили усилия, чтобы exitнапечатать «полезную» строку, но не могли просто связать ее, чтобы сделать естественную вещь и выйти из интерпретатора. Быть вынужденным вводить скобки каждый раз разочаровывает. Этот ответ идеален и должен быть принят.
Przemek D
3

Чтобы выйти из терминала Python , просто выполните:

exit()

Пожалуйста, обратите внимание, что эта функция вызывается, поскольку большинство пользователей смешивают ее с выходом без вызова, но новый терминал Pyhton показывает сообщение ...

или как ярлык, нажмите:

Ctrl + D

на твоей клавиатуре ...

Ctrl + D

Алиреза
источник
1
Все, что вы сказали, уже было рассмотрено в ответах выше.
Przemek D
0

Если вы застряли в командной строке Python и ни одно из перечисленных выше решений не помогло вам, попробуйте exit(2)

Махди Багбани
источник
-1

«exit» - это допустимое имя переменной, которое можно использовать в вашей программе на Python. Вы не захотите выходить из интерпретатора, когда вы просто пытаетесь увидеть значение этой переменной.

Чад Кеннеди
источник
За исключением случаев, когда вы назначаете exit, вы переопределяете этот символ и exit()больше не будете работать. Хотя этот символ является допустимым именем переменной, использование его таким способом не кажется хорошей практикой.
Przemek D