Подтвердить что ты не робот

Копирование и вставка кода в интерпретатор 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 = ''
4b9b3361

Ответ 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.