Das folgende Skript nimmt an, dass es alle Vorkommen von `>>>` bzw. `...` am Zeilenanfang als Prompt interpretieren und daher löschen darf. Zusätzlich werden Zeilen, die mit keins von beiden anfangen, komplett gelöscht. Das hat den Vorteil, dass etwaige Rückgabewerte rausgenommen werden und man das bereinigte Ergebnis direkt via `exec` ausführen oder irgendwo zum späteren Ausführen zwischenspeichern kann.
Wer `xsel` installiert hat (also i.d.R. Linux-User), braucht eigentlich nur den gewünschten Code in die Zwischenablage zu kopieren und die Hauptfunktion des Skriptes auszuführen, da dann die Ausgabe des besagten Programms (also Clipboard-Inhalt) zum Bereinigen genommen wird. Windows-Benutzer müssen die Konsolenausgabe leider händisch übergeben - zumindest solange es keine "Paste-Funktion" für sie gibt...
Was man noch machen könnte, wären Kommandozeilen-Parameter. Aktuell wird bei einem Ausführen "von Außen" standardmäßig das "Tastatur-Clipboard" verwendet (`xsel -b`). Vielleicht nutzt der Ein oder andere aber auch lieber die mittlere Maustaste für solche Aktionen oder möchte gar nichts mit der Zwischenablage machen, sondern nur die Ausgabe sehen. Außerdem finde ich den Weg, wie ich in die Pipe von `xsel` schreibe, nicht so toll. Ich denke, das geht doch bestimmt auch ohne `echo`.
Code: Alles auswählen
from subprocess import Popen, PIPE
def _get_clipboard_contents():
xsel = Popen(['xsel', '-b'], stdout=PIPE)
clipboard_contents = xsel.communicate()[0]
return clipboard_contents
def _write_to_clipboard(s):
echo = Popen(['echo', s], stdout=PIPE)
xsel = Popen(['xsel', '-b', '-i'], stdin=echo.stdout, stdout=PIPE)
xsel.communicate()
def pycon2source(s=None, copy_result=True):
s = s or _get_clipboard_contents()
result = '\n'.join(
line[4:] for line in s.splitlines()
if line.startswith(('>>>', '...'))
)
if copy_result:
_write_to_clipboard(result)
return result
if __name__ == '__main__':
print pycon2source()