Copy-paste into Python interactive interpreter and indentation

前端 未结 8 1649
借酒劲吻你
借酒劲吻你 2020-12-06 00:41

This piece of code, file test.py,

if 1:
   print \"foo\"
print \"bar\"

can be successfully executed with execfile(\"test.py\

相关标签:
8条回答
  • 2020-12-06 00:58

    I don't know any trick for the standard command prompt, but I can suggest you a more advanced interpreter like IPython that has a special syntax for multi-line paste:

    In [1]: %cpaste
    Pasting code; enter '--' alone on the line to stop.
    :for c in range(3):
    :    print c
    :
    :--
    0
    1
    2
    

    Another option is the bpython interpreter that has an automatic paste mode (if you are typing too fast to be an human):

    >>> for c in range(3):
    ...     print c
    ... 
    0
    1
    2
    >>> 
     <C-r> Rewind  <C-s> Save  <F8> Pastebin  <F9> Pager  <F2> Show Source 
    
    0 讨论(0)
  • 2020-12-06 00:59

    Indentation is probably lost or broken.

    Have a look at IPython -- it's an enhanced Python interpreter with many convenient features. One of them is a magic function %paste that allows you to paste multiple lines of code.

    It also has tab-completion, auto-indentation... and many more. Have a look at their site.


    Using %paste in IPython:

    Enter image description here

    And copy-and-paste stuff is one of the things fixed in the Qt console. Here's using a plain old copy-and-paste of your code block that "just works" in the new IPython qtconsole:

    Enter image description here

    0 讨论(0)
  • 2020-12-06 00:59

    One other solution I recently found for a similar problem:

    $ python << EOF
    if 1:
       print "foo"
    print "bar"
    
    EOF
    
    0 讨论(0)
  • 2020-12-06 01:01

    If you are like me and use Notepad++ (to copy and paste from), try to replace tabs by spaces by going to menu SettingsPreferencesLanguage and check the replace by spaces.

    I had this problem myself for so long and I found out that python.exe recognizes spaces.

    0 讨论(0)
  • 2020-12-06 01:02

    All of the current answers suggest you change to IPython. For a Python-only solution, you can use textwrap to remove leading whitespace from lines.

    For example,

    >>> code="""    x='your pasted code'
                    y='with common indentation'"""
    >>> formatted=textwrap.dedent(code)
    >>> exec(formatted)
    
    0 讨论(0)
  • 2020-12-06 01:03

    Do %autoindent to make automatic indentation off. After that, you can paste your code in IPython.

    0 讨论(0)
提交回复
热议问题