Копирование и вставка кода в интерпретатор 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", и вы должны иметь возможность запустить его.

вы можете прочитать здесь:

http://docs.python.org/tutorial/modules.html


вы можете просто преобразовать все символы табуляции на пробелы и удалить все пустые строки. Таким образом, Вы сможете вставить любой код в консоль python (например: python2.6)


можно использовать оболочкой IPython что намного лучше Python repl. Он имеет команду для получения ввода от внешний редактор С помощью команды %edit.


Dreampie позволяет копировать и вставлять код с правильным отступом.


на 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.