Копирование и вставка кода в интерпретатор Python
есть фрагмент кода, который я хотел скопировать и вставить в мой интерпретатор Python. К сожалению, из-за чувствительности Python к пробелам не просто скопировать и вставить его способом, который имеет смысл. (Я думаю, что пробелы искажаются) есть ли лучший способ? Возможно, я смогу загрузить фрагмент из файла.
Это всего лишь небольшой пример, но если есть много кода, я хотел бы избежать ввода всего из определения функции или копирования и линии склейки на линии.
class bcolors:
HEADER = '3[95m'
OKBLUE = '3[94m'
OKGREEN = '3[92m'
WARNING = '3[93m'
FAIL = '3[91m'
ENDC = '3[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 = ''
11 ответов
вы можете вызвать execfile (filename). Более или менее то же самое, что и импорт модуля, за исключением того, что он пропускает часть администрирования модуля и не требует добавления папки в sys.путь.
EDIT: для решения исходного вопроса: копировать вставленный код можно выполнить, вызвав exec(codestring).
вы можете легко и безопасно копировать-вставить с оболочкой IPython, посредством команды %cpaste
и %paste
. Это очень удобно для тестирования кода, который вы копируете с веб-страниц, например, или из редактора. IPython также имеет %run
команда, которая запускает программу и оставляет вас в оболочке Python со всеми переменными, которые были определены в программе, чтобы вы могли играть с ними.
чтобы получить помощь по этим функциям:%cpaste?
, etc.
вы можете просто импортировать файл в интерпретатор Python. Это загрузит класс и позволит вам запустить код.
например, создайте файл с именем "bgcolors.py" и скопируйте и вставьте код внутри. Затем, используя интерпретатор python, вы просто вводите "импорт bgcolors", и вы должны иметь возможность запустить его.
вы можете прочитать здесь:
вы можете просто преобразовать все символы табуляции на пробелы и удалить все пустые строки. Таким образом, Вы сможете вставить любой код в консоль python (например: python2.6)
можно использовать оболочкой IPython что намного лучше Python repl. Он имеет команду для получения ввода от внешний редактор С помощью команды %edit.
на IDLE интерфейс делает попытку сохранить правильный отступ вставленного текста.
мой ответ конкретно касается копирования-вставки в стандартную оболочку python (тестируется только на linux).
в зависимости от того, откуда берется код и как он изначально отформатирован пробел может или не имеет значения. В частности, о вашем примере фрагмента-копировать-вставить из раздела SO в формате кода - это не имеет значения (при условии, что код правильно отступ, чтобы быть исполняемым).
пустая строка, однако, вызывает проблемы в стандартном интерпретаторе python, потому что обычно это shell-s de-indent cmd. В случае вашего фрагмента пустая строка, предшествующая disable()
определение функции заканчивается / выходит из определения класса преждевременно, поэтому, когда disable()
строка определения приходит в обнаружена ошибка отступа:
>>> class bcolors:
... HEADER = '3[95m'
... OKBLUE = '3[94m'
... OKGREEN = '3[92m'
... WARNING = '3[93m'
... FAIL = '3[91m'
... ENDC = '3[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 = ''
...
>>>
недавно у меня была эта проблема, и в конечном итоге мне просто нужно было изменить настройку отступа моего редактора с вкладок на пробелы. (Я запускал интерпретатор с помощью терминала OSX.) Как только я это сделал, copy & paste работал нормально.
есть встроенный метод называют "отступ область и dedent области" и вы можете просто использовать его. После того, как вы вставляете много кода сразу, вы можете выбрать их все и настроить пробелы.
для тех, у кого есть проблемы с копированием / вставкой с помощью ctrl-c & ctrl-v в оболочке интерпретатора python в Windows, где он просто показывает:
>>> ^V
просто щелкните правой кнопкой мыши строку заголовка окна приложения и выберите по умолчанию или Свойства, Затем вы хотите отменить проверку Use legacy console (requires relaunch)
сделать сейчас Enable Ctrl key shortcuts
проверяется, затем закрывается и снова открывается окно консоли интерпретатора Python.