这段代码,文件test.py,
if 1:
print "foo"
print "bar"
可以使用
execfile("test.py")
或 python test.py
成功执行,但是当尝试将其复制粘贴到 Python 解释器中时:
File "<stdin>", line 3
print "bar"
^
SyntaxError: invalid syntax
为什么会这样?解释器可以配置为成功读取复制粘贴的文本吗?
我想这可能会影响在解释器中输入,但这对我来说没关系。
压痕可能丢失或损坏。
看看 IPython——它是一个增强的 Python 解释器,具有许多方便的功能。其中之一是一个神奇的功能
%paste
,它允许您粘贴多行代码。
它还有制表符补全、自动缩进……等等。看看他们的网站。
在 IPython 中使用
%paste
:
复制粘贴功能是 Qt 控制台中修复的功能之一。这里使用的是代码块的普通旧复制粘贴,它在新的 IPython qtconsole 中“正常工作”:
我不知道标准命令提示符的任何技巧,但我可以建议您使用更高级的解释器,例如 IPython,它具有用于多行粘贴的特殊语法:
In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:for c in range(3):
: print c
:
:--
0
1
2
另一个选项是 bpython 解释器,它具有自动粘贴模式(如果您打字太快而无法成为人类):
>>> for c in range(3):
... print c
...
0
1
2
>>>
<C-r> Rewind <C-s> Save <F8> Pastebin <F9> Pager <F2> Show Source
执行
%autoindent
以关闭自动缩进。之后,您可以将代码粘贴到 IPython 中。
textwrap 删除行中的前导空格。
例如,
>>> code=""" x='your pasted code'
y='with common indentation'"""
>>> formatted=textwrap.dedent(code)
>>> exec(formatted)
IndentationError
,因为任何先前的上下文都已关闭。解决方案:
Notepad++(从中复制和粘贴),尝试通过转到菜单设置→首选项→语言并检查用空格替换来用空格替换制表符。
我自己也遇到这个问题很久了,我发现python.exe可以识别空格。
exec(pyperclip.paste())
前提是您不介意使用exec
。我猜除了
pyperclip
以外的任何其他第三方剪贴板包都可以。
$ python << EOF
if 1:
print "foo"
print "bar"
EOF