将代码复制并粘贴到Python解释器中

时间:2010-03-23 15:34:15

标签: 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 = ''

11 个答案:

答案 0 :(得分:25)

您通常可以使用IPython通过命令%cpaste(手动结束代码--)和%paste轻松安全地进行复制粘贴(立即执行代码) 。这对于测试从网页或编辑器中复制的代码非常方便:这些命令甚至可以为您删除前导提示(如In[1]...)。

IPython还有一个%run命令,它运行一个程序,让你在Python shell中包含程序中定义的所有变量,以便你可以使用它们。

为了获得有关这些功能的帮助:%cpaste?

答案 1 :(得分:10)

您可以调用execfile(filename)。与导入模块大致相同,只是它会跳过模块管理部分,并且不需要您向sys.path添加文件夹。

编辑:解决原始问题:可以通过调用exec(codestring)来执行复制粘贴代码。

答案 2 :(得分:6)

您只需将文件导入python解释器即可。这将加载类,并允许您运行代码。

例如,创建一个名为“bgcolors.py”的文件,然后将代码复制并粘贴到其中。然后使用python解释器,只需输入“import bgcolors”,你就可以运行它。

您可以在这里阅读更多内容:

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

答案 3 :(得分:6)

您只需将所有标签转换为空格,然后移除所有空行即可。 因此,您可以将任何代码粘贴到python控制台(例如:python2.6)

答案 4 :(得分:5)

你可以使用IPython这是更好的python repl。它具有使用%edit命令从external editor获取输入的命令。

答案 5 :(得分:3)

Dreampie允许您使用适当的缩进来复制和粘贴代码。

答案 6 :(得分:2)

IDLE界面确实努力保留粘贴文本的正确缩进。

答案 7 :(得分:1)

我的答案是关于复制粘贴到标准python shell(仅在linux上测试)。

取决于代码的来源以及最初格式化的方式空白可能有问题,也可能无关紧要。特别是关于你的示例代码段 - 从SO的代码格式部分复制粘贴 - 它并不重要(假设代码被正确缩进为可执行代码)。

空行确实会导致标准python解释器出现问题,因为它通常是 shell-s 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 = ''
... 
>>>

答案 8 :(得分:0)

我最近遇到了这个问题,最终只需要将编辑器的缩进设置从制表符更改为空格。 (我使用OSX终端运行解释器。)一旦我这样做,复制&amp;粘贴工作正常。

答案 9 :(得分:0)

有一个内置方法调用“缩进区域和dedent区域”,你可以使用它。在您粘贴大量代码后,您可以全部选择它们并调整空白。

答案 10 :(得分:-1)

对于那些使用ctrl-c&amp ;;复制/粘贴问题的人ctrl-v在Windows上的python解释器shell中,它只显示:

>>> ^V

只需右键单击应用程序窗口标题栏并选择默认值或属性,然后您要取消选中Use legacy console (requires relaunch),确保选中Enable Ctrl key shortcuts,然后关闭并重新打开Python解释器控制台窗口。