Копирование и вставка кода в интерпретатор Python
Существует фрагмент кода, который я хотел бы скопировать и вставить в свой интерпретатор Python. К сожалению, из-за чувствительности Python к пробелу не так просто скопировать и вставить его таким образом, который имеет смысл. (Я думаю, что пробелы становятся искалеченными) Есть ли лучший способ? Возможно, я могу загрузить фрагмент из файла.
Это всего лишь небольшой пример, но если есть много кода, я бы хотел не вводить все из определения функции или копировать и вставлять строки за строкой.
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
def disable(self):
self.HEADER = '' # I think stuff gets mangled because of the extra level of indentation
self.OKBLUE = ''
self.OKGREEN = ''
self.WARNING = ''
self.FAIL = ''
self.ENDC = ''
Ответы
Ответ 1
Вы можете вызвать execfile (имя файла). Более или менее то же, что и импорт модуля, за исключением того, что он пропускает часть администрирования модуля и не требует, чтобы вы добавляли папку в sys.path.
EDIT: для ответа на исходный вопрос: копируемый код может быть выполнен путем вызова exec (codestring).
Ответ 2
Обычно вы можете легко и безопасно выполнить вставку копий с помощью IPython, используя команды %cpaste
(вручную заканчивайте код с помощью --
) и %paste
(выполняйте код немедленно). Это очень удобно для тестирования кода, который вы копируете, например, с веб-страниц или из вашего редактора: эти команды даже отбрасывают для вас начальные подсказки (например, In[1]
и ...
).
IPython также имеет команду %run
которая запускает программу и оставляет вас в оболочке Python со всеми переменными, которые были определены в программе, чтобы вы могли поиграть с ними.
Чтобы получить помощь по следующим функциям: %cpaste?
, так далее.
Ответ 3
Вы можете просто импортировать файл в интерпретатор python. Это загрузит класс и позволит вам запустить код.
Например, создайте файл с именем "bgcolors.py" и скопируйте и вставьте свой код внутри. Затем, используя интерпретатор python, вы просто набираете "import bgcolors", и вы должны иметь возможность запускать его.
Вы можете прочитать здесь:
http://docs.python.org/tutorial/modules.html
Ответ 4
Вы можете просто преобразовать все вкладки в пробелы и удалить пустые строки ВСЕ.
Таким образом, вы сможете вставить любой код в консоль python (например: python2.6)
Ответ 5
Вы можете использовать IPython, что намного лучше, чем python repl. Он имеет команду для ввода из внешнего редактора с помощью команды% edit.
Ответ 6
Dreampie позволяет копировать и вставлять код с правильным отступом.
Ответ 7
Интерфейс IDLE делает все возможное, чтобы сохранить правильный отступ вставного текста.
Ответ 8
Мой ответ в основном посвящен копированию в стандартную оболочку python (проверяется только на linux).
В зависимости от того, откуда приходит код и как он изначально отформатирован , пробелы могут иметь значение или не иметь значения. В частности, ваш примерный фрагмент - скопированный из раздела SO-форматирования SO - это не имеет значения (предполагается, что код правильно отступом для исполняемого файла).
Пустая строка, однако, вызывает проблемы в стандартном интерпретаторе python, так как обычно это de-indent cmd оболочки. В вашем фрагменте фрагмента пустая строка, предшествующая определению функции disable()
, заканчивается/выходит из определения класса преждевременно, поэтому, когда строка определения disable()
появляется с ошибкой отступа, обнаружено:
>>> class bcolors:
... HEADER = '\033[95m'
... OKBLUE = '\033[94m'
... OKGREEN = '\033[92m'
... WARNING = '\033[93m'
... FAIL = '\033[91m'
... ENDC = '\033[0m'
...
>>> def disable(self):
File "<stdin>", line 1
def disable(self):
^
IndentationError: unexpected indent
>>>
Поэтому вам просто нужно обратить внимание на эти пустые строки. Для работы над этой пустой строкой вам нужен всего 2 многострочных инструмента для копирования-вставки.
Единственное, что мне было нужно - для копирования только разделов уже вдавленного кода (например, функций из внутренних классов) - один дополнительный уровень отступов, чтобы не требовать повторного ввода отступа скопированного кода. Для этого ведущая строка if 1:
перед вставкой фрагмента и Enter (т.е. Пустая строка) после трюка:
>>> if 1:
... def disable(self):
... self.HEADER = '' # I think stuff gets mangled because of the extra level of indentation
... self.OKBLUE = ''
... self.OKGREEN = ''
... self.WARNING = ''
... self.FAIL = ''
... self.ENDC = ''
...
>>>
Ответ 9
У меня была эта проблема в последнее время, и в итоге мне просто нужно было изменить настройку отступа редактора от вкладок до пробелов. (Я запускал интерпретатор с помощью терминала OSX.) Как только я это сделал, копирование и вставка работали нормально.
Ответ 10
Существует встроенный вызов метода "область отступа и область выделения", и вы можете просто использовать его. После того, как вы вставляете много кода сразу, вы можете выбрать их все и отредактировать пробелы.
Ответ 11
Для тех, у кого есть проблемы с копированием/вставкой с помощью ctrl-c и ctrl-v в оболочке интерпретатора python в Windows, где он просто показывает:
>>> ^V
просто щелкните правой кнопкой мыши строку заголовка окна приложения и выберите значение по умолчанию или свойства, затем вы хотите отменить проверку Use legacy console (requires relaunch)
, чтобы теперь отмечать Enable Ctrl key shortcuts
, затем закрыть и повторно открыть окно консоли интерпретатора Python.