2016-01-18 17 views
8

Viele Online-Python-Beispiele zeigen interaktive Python-Sitzungen mit normalen führenden Zeichen ">>>" und "..." vor jeder Zeile.Python: ignorieren führenden ">>>" und "..." im interaktiven Modus?

Oft gibt es keine Möglichkeit, diesen Code zu kopieren, ohne auch diese Präfixe zu erhalten.

In diesen Fällen, wenn ich diesen Code nach dem Kopieren wieder in meinen eigenen Python-Interpreter einfügen möchte, muss ich etwas Arbeit tun, um diese Präfixe zuerst abzustreifen.

Kennt jemand eine Möglichkeit, Python oder iPython (oder einen anderen Python-Interpreter) zu veranlassen, führende ">>>" und "..." - Zeichen in Zeilen, die eingefügt werden, automatisch zu ignorieren?

Beispiel:

>>> if True: 
...  print("x") 
... 
+1

@PadraicCunningham, es ist _not_ nicht das Standardverhalten im 'Python'-Interpreter, obwohl. [IPython] (https://ipython.org/) ist nicht in Python enthalten. – Chris

+3

Ja, aber die op _did_ Erwähnung IPython in der Frage :) – bakkal

+1

@Chris, ich erwähnte nie den Python-Interpreter, ich sprach über den Ipython-Interpreter Verweis auf die OP, * Weiß jemand eine Möglichkeit, Python oder ** iPython ** ... * –

Antwort

2

Sie müssen nur entweder autoindent auszuschalten >>> und ... in einem mehrzeiligen Paste enthalten:

In [14]: %autoindent 
Automatic indentation is: OFF 
In [15]: >>> for i in range(10): 
    ....: ...  pass 
    ....: 

In [16]: >>> for i in range(10): 
    ...: ...  pass 
    ...: ... 
In [17]: >>> for i in range(10): 
    ...: ...  pass 
    ...: ... 

In [18]: %autoindent 
Automatic indentation is: ON 

In [19]: >>> for i in range(10): 
    ....:  ...  pass 
    ....:  
    File "<ipython-input-17-5a70fbf9a5a4>", line 2 
    ...  pass 
    ^
SyntaxError: invalid syntax 

Oder kopieren Sie nicht die >>> und es wird funktionieren:

In [20]: %autoindent 
Automatic indentation is: OFF 

In [20]: for i in range(10): 
    ....: ...  pass 
    ....: 
+0

Ja. Es funktioniert für mich in ipython, nachdem ich% autoindent deaktiviert habe. Das reicht aus, um mein Problem zu lösen. Dank an alle. – HippoMan

5

IPython wird dies automatisch für Sie tun.

In [5]: >>> print("hello") 
hello 

In [10]: >>> print(
    ....: ... "hello" 
    ....:) 
hello 
+0

Ich habe eine 'for' -Schleife (das mehrzeilige Äquivalent von' für i im Bereich (10): pass ') und es hat nicht funktioniert. Ich habe einen SystaxError auf "pass" bekommen. – tdelaney

+0

Nun IPython wird versuchen, für Sie automatisch einzurücken, so dass das Problem dort wahrscheinlich ist. Sie können '% cpaste' verwenden, um den Einfügemodus zu aktivieren, und dann' - ', um das Einfügen abzuschließen. –

1

Nicht ganz dasselbe wie Einfügen in die Shell, aber das doctest Modul kann nützlich sein. Es scannt ein Python-Modul oder eine normale Textdatei nach interaktiven Skriptfragmenten und führt sie dann aus. Sein primärer Anwendungsfall ist die Mischung von Dokumentation und Komponententest. Angenommen, Sie haben ein Tutorial wie

This is some code to demonstrate the power of the `if` 
statement. 

>>> if True: 
...  print("x") 
... 
x 

Remember, each `if` increases entropy in the universe, 
so use with care. 

>>> if False: 
...  print("y") 
... 

Speichern in eine Datei und dann laufen doctest

$ python -m doctest -v k.txt 
Trying: 
    if True: 
     print("x") 
Expecting: 
    x 
ok 
Trying: 
    if False: 
     print("y") 
Expecting nothing 
ok 
1 items passed all tests: 
    2 tests in k.txt 
2 tests in 1 items. 
2 passed and 0 failed. 
Test passed. 

doctest die Skriptfragmente läuft und vergleicht es mit dem erwarteten Ausgang.

UPDATE

Hier ist ein Skript, das die Python in die Zwischenablage ist und fügen Sie ihn zurück Skript Fragmente nehmen, was. Kopieren Sie Ihr Beispiel, führen Sie dieses Skript aus und fügen Sie es in die Shell ein.