Копирование и вставка кода в интерпретатор Python - PullRequest
32 голосов
/ 23 марта 2010

Существует фрагмент кода, который я хотел бы скопировать и вставить в мой интерпретатор 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 = ''

Ответы [ 11 ]

25 голосов
/ 24 марта 2010

Обычно вы можете легко и безопасно выполнить копирование с помощью IPython , с помощью команд %cpaste (код завершения вручную с помощью --) и %paste (выполнение кода немедленно). Это очень удобно для тестирования кода, который вы копируете, например, с веб-страниц или из вашего редактора: эти команды даже отбрасывают для вас начальные подсказки (например, In[1] и ...).

IPython также имеет команду %run, которая запускает программу и оставляет вас в оболочке Python со всеми переменными, которые были определены в программе, так что вы можете играть с ними.

Чтобы получить справку по следующим функциям: %cpaste? и т. Д.

10 голосов
/ 23 марта 2010

Вы можете вызвать execfile (имя файла). Более или менее аналогично импорту модуля, за исключением того, что он пропускает часть администрирования модуля и не требует добавления папки в sys.path.

РЕДАКТИРОВАТЬ: Для решения исходного вопроса: скопированный код может быть выполнен с помощью вызова exec (codestring).

6 голосов
/ 23 июня 2016

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

6 голосов
/ 23 марта 2010

Вы можете просто импортировать файл в интерпретатор python. Это загрузит класс и позволит вам запустить код.

Например, создайте файл с именем "bgcolors.py" и скопируйте и вставьте в него свой код. Затем, используя интерпретатор python, вы просто набираете «import bgcolors», и вы сможете его запустить.

Вы можете прочитать больше здесь:

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

5 голосов
/ 23 марта 2010

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

3 голосов
/ 23 марта 2010

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

2 голосов
/ 23 марта 2010

Интерфейс IDLE делает все возможное для сохранения правильного отступа вставленного текста.

1 голос
/ 08 сентября 2016

Мой ответ специально о копировании в стандартную оболочку Python (тестируется только в Linux).

В зависимости от того, откуда взялся код и как он изначально отформатирован пробел может иметь или не иметь значения. В частности, для вашего примера фрагмента - скопированного из раздела, отформатированного в коде SO - это не имеет значения (при условии правильного отступа кода для выполнения).

Пустая строка , однако, вызывает проблемы в стандартном интерпретаторе python, потому что обычно это de-indent оболочки-s 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: до вставки фрагмента и Введите (т.е. пустая строка) после выполнения трюка:

>>> 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 = ''
... 
>>>
0 голосов
/ 14 сентября 2017

Для тех, у кого есть проблемы с копированием / вставкой, используя ctrl-c & ctrl-v в оболочке интерпретатора python в Windows, где он просто показывает:

>>> ^V

просто щелкните правой кнопкой мыши строку заголовка окна приложения и выберите значение по умолчанию или свойства, затем отмените выбор Use legacy console (requires relaunch), убедившись, что теперь установлен флажок Enable Ctrl key shortcuts, затем закройте и снова откройте окно консоли интерпретатора Python. .

0 голосов
/ 08 сентября 2016

Существует встроенный вызов метода "indent region & dedent region", и вы можете просто использовать его. После того, как вы вставите много кода одновременно, вы можете выбрать их все и настроить пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...