Ausführen von interaktivem Python-Skript von emacs

8

Ich bin ein ziemlich geübter vim Benutzer, aber Freunde von mir erzählten mir so viel gutes Zeug über Emacs, dass ich mich entschied, es zu versuchen - besonders nachdem ich über den treffend benannten bösen Modus herausgefunden hatte ...

Wie auch immer, ich arbeite gerade an einem Python-Skript, das Benutzereingaben erfordert (eine Unterklasse von cmd.Cmd). In vim, wenn ich es ausprobieren wollte, könnte ich einfach :!python % machen und dann mit meinem Skript interagieren, bis es beendet wird. In Emacs probierte ich M-! python script.py , wodurch das Skript zwar in einem separaten Puffer laufen würde, aber RETURNs scheint nicht zurück zum Skript gesendet zu werden, sondern stattdessen vom Emacs-Puffer. Ich habe auch versucht, sich die C-c C-c des Python-Modus anzusehen, aber dies führt das Skript in einem temporären Verzeichnis aus, während ich es nur in (pwd) ausführen möchte.

Also, gibt es eine kanonische Art, das zu tun?

    
antony 17.02.2012, 08:04
quelle

6 Antworten

4

Ich weiß nichts über canonical , aber wenn ich mit einem Skript interagieren müsste, würde ich M - x % co_de machen % RET und führen Sie das Skript von dort aus.

Es gibt auch M - x shell für ernsthaftere Terminal-Emulation, nicht nur Shell-Sachen.

    
Teddy 17.02.2012 08:25
quelle
3

Ich verwende gerne den Emacs-Befehl "compile", um meine Python-Skripte zu testen / auszuführen. M - X kompilieren RET ruft den Standard "make -k" auf, aber wenn Sie das löschen und die Befehlszeile für Ihr Skript (einschließlich der Optionen) eingeben, werden nachfolgende "compiles" das neue "compile" bereitstellen "Befehl automatisch. Die gesamte Ausgabe Ihres Skripts wird im Kompilierungspuffer angezeigt. (Im Gegensatz zur Shell bietet dies jedes Mal, wenn es aufgerufen wird, einen schönen sauberen Puffer. Gut für die Suche und so. Wenn Sie vergessen, Ihr Skript vor der Ausführung zu speichern, fragt Sie das Kompilieren, ob Sie die Datei speichern möchten.)

Sie werden Ihre Befehlszeile verlieren, wenn Sie Emacs neu starten. Aber Sie können Emacs dazu bringen, den Kompilierbefehl für den Puffer, der Ihr Skript enthält, zu setzen, indem Sie am Ende des Python-Skripts diese Art von Code einfügen (eigentlich ein Python-Kommentar):

%Vor%

Dies ist praktisch für Skripte mit komplizierten Aufrufen. Hinweis: Das Python-Kommentarzeichen '#' schützt dies vor dem Python-Interpreter, während Emacs weiß, dass diese Variablen gesetzt werden müssen, da es beim Öffnen der Datei am Ende jeder Datei steht.

Ich würde gerne in meinem Python-Skript zu "Kompilierfehlern" springen können, so wie es der Kompilierbefehl tut, wenn Sie ihn zum Kompilieren von C-Code verwenden, aber ich bin zu faul, den regulären Emacs-Ausdruck dafür zu erstellen Arbeit. Vielleicht würde das eine weitere große Frage für den Stack-Überlauf stellen!

    
user1040087 17.02.2012 15:16
quelle
1

Ich denke, ansi-term hat die zuverlässigste Emulation eines Terminals. Aber ich sehe keine Möglichkeit, Argumente an den Prozess zu übergeben. Sie können es natürlich einfach von einer Shell im ansi-term -Puffer aus starten.

Aber ich denke, es ist am besten, python-send-buffer nicht zu verwenden, sondern stattdessen eine neue Funktion zu verwenden, die es "richtig" macht, indem man den Pfad zur aktuellen Datei sendet, anstatt eine temporäre Datei zu erstellen. Es gibt natürlich ein paar kleine Unterschiede darin, dass Sie die aktuelle Datei zuerst speichern müssen, aber das Folgende sollte Sie zumindest auf den richtigen Weg bringen.

%Vor%

Ich habe es überprüft und das ermöglicht dir zu interagieren. Um Registerkarten zu erhalten, haben Sie ein paar Optionen.

  • C-q TAB gibt Ihnen immer eine wörtliche Registerkarte
  • Sie können die Registerkarte "Registerkarte" erneut binden, um eine literale Registerkarte in inferior-python-mode-map zu sein:

    %Vor%
  • Ich bin mir sicher, dass es andere gibt, an die ich nicht denken kann

Ivan Andrus 17.02.2012 21:20
quelle
1
___ answer9330755 ___

Ich verwende gerne den Emacs-Befehl "compile", um meine Python-Skripte zu testen / auszuführen. global-set-key - %code% kompilieren %code% ruft den Standard "make -k" auf, aber wenn Sie das löschen und die Befehlszeile für Ihr Skript (einschließlich der Optionen) eingeben, werden nachfolgende "compiles" das neue "compile" bereitstellen "Befehl automatisch. Die gesamte Ausgabe Ihres Skripts wird im Kompilierungspuffer angezeigt. (Im Gegensatz zur Shell bietet dies jedes Mal, wenn es aufgerufen wird, einen schönen sauberen Puffer. Gut für die Suche und so. Wenn Sie vergessen, Ihr Skript vor der Ausführung zu speichern, fragt Sie das Kompilieren, ob Sie die Datei speichern möchten.)

Sie werden Ihre Befehlszeile verlieren, wenn Sie Emacs neu starten. Aber Sie können Emacs dazu bringen, den Kompilierbefehl für den Puffer, der Ihr Skript enthält, zu setzen, indem Sie am Ende des Python-Skripts diese Art von Code einfügen (eigentlich ein Python-Kommentar):

%Vor%

Dies ist praktisch für Skripte mit komplizierten Aufrufen. Hinweis: Das Python-Kommentarzeichen '#' schützt dies vor dem Python-Interpreter, während Emacs weiß, dass diese Variablen gesetzt werden müssen, da es beim Öffnen der Datei am Ende jeder Datei steht.

Ich würde gerne in meinem Python-Skript zu "Kompilierfehlern" springen können, so wie es der Kompilierbefehl tut, wenn Sie ihn zum Kompilieren von C-Code verwenden, aber ich bin zu faul, den regulären Emacs-Ausdruck dafür zu erstellen Arbeit. Vielleicht würde das eine weitere große Frage für den Stack-Überlauf stellen!

    
___ qstnhdr ___ Ausführen von interaktivem Python-Skript von emacs ___ qstntxt ___

Ich bin ein ziemlich geübter vim Benutzer, aber Freunde von mir erzählten mir so viel gutes Zeug über Emacs, dass ich mich entschied, es zu versuchen - besonders nachdem ich über den treffend benannten bösen Modus herausgefunden hatte ...

Wie auch immer, ich arbeite gerade an einem Python-Skript, das Benutzereingaben erfordert (eine Unterklasse von cmd.Cmd). In vim, wenn ich es ausprobieren wollte, könnte ich einfach %code% machen und dann mit meinem Skript interagieren, bis es beendet wird. In Emacs probierte ich %code% , wodurch das Skript zwar in einem separaten Puffer laufen würde, aber RETURNs scheint nicht zurück zum Skript gesendet zu werden, sondern stattdessen vom Emacs-Puffer. Ich habe auch versucht, sich die %code% des Python-Modus anzusehen, aber dies führt das Skript in einem temporären Verzeichnis aus, während ich es nur in %code% ausführen möchte.

Also, gibt es eine kanonische Art, das zu tun?

    
___ answer9335574 ___

Ich denke, %code% hat die zuverlässigste Emulation eines Terminals. Aber ich sehe keine Möglichkeit, Argumente an den Prozess zu übergeben. Sie können es natürlich einfach von einer Shell im %code% -Puffer aus starten.

Aber ich denke, es ist am besten, %code% nicht zu verwenden, sondern stattdessen eine neue Funktion zu verwenden, die es "richtig" macht, indem man den Pfad zur aktuellen Datei sendet, anstatt eine temporäre Datei zu erstellen. Es gibt natürlich ein paar kleine Unterschiede darin, dass Sie die aktuelle Datei zuerst speichern müssen, aber das Folgende sollte Sie zumindest auf den richtigen Weg bringen.

%Vor%

Ich habe es überprüft und das ermöglicht dir zu interagieren. Um Registerkarten zu erhalten, haben Sie ein paar Optionen.

  • C-q TAB gibt Ihnen immer eine wörtliche Registerkarte
  • Sie können die Registerkarte "Registerkarte" erneut binden, um eine literale Registerkarte in %code% zu sein:

    %Vor%
  • Ich bin mir sicher, dass es andere gibt, an die ich nicht denken kann

___ answer9325028 ___

Ich weiß nichts über canonical , aber wenn ich mit einem Skript interagieren müsste, würde ich M - x % co_de machen % RET und führen Sie das Skript von dort aus.

Es gibt auch M - x %code% für ernsthaftere Terminal-Emulation, nicht nur Shell-Sachen.

    
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123emacs ___ GNU Emacs ist ein erweiterbarer, anpassbarer, selbstdokumentierender Texteditor, der mit Lisp-Code erweitert werden kann. Obwohl Emacs ein Editor für allgemeine Zwecke ist, können Fragen hier zum Thema gehören, wenn es darum geht, Emacs selbst zu erweitern (normalerweise durch Schreiben von Emacs-Lisp-Funktionen) oder über bestimmte Programmiermodi. Andernfalls (und vielleicht auch in diesen Fällen) sollten Sie Ihre Frage zu Emacs Stack Exchange stellen. ___ answer33426265 ___

Ich verwende diese Hooks derzeit, um meine Kompilierungsbefehle zu definieren:

%Vor%

Zusammen mit diesem lambda set, um die Kompilierfunktion interaktiv aufzurufen:

%Vor%

Ein Knopf, um alle zu beherrschen!

Wenn Sie F4 drücken (in meinem Fall können Sie den Schlüssel selbst im Lambda für %code% setzen), wird eine im C ++ - oder C-Modus geöffnete Datei kompiliert und eine Datei in Python oder Perl-Modus wird (interaktiv) ausgeführt werden

    
___ answer9349306 ___

Noch eine weitere Option:

Die Verwendung von %code% funktioniert gut mit fgallinas python.el - pwd ist der Speicherort der Pufferdatei.

    
___ answer31352999 ___

Wenn Sie C-c C-c verwenden, wird ein Puffer erstellt (suchen Sie inferior-python). Versuchen Sie, zu diesem Puffer * zu wechseln. Jedes Mal, wenn Sie C-c C-c drücken, wird das Ergebnis dort angezeigt. Sie müssen diesen Puffer sehen, um die Ergebnisse zu erhalten. Verwenden Sie C-x 2, damit Sie beide Puffer gleichzeitig sehen können. Probieren Sie auch C-c C-z (wechseln zur Shell).

* Ich verwende Ibuffer, um Puffer zu verwalten, ist sehr gut. (übrigens, diese Ссылка ist ein ausgezeichneter Ort, um einige Emacs zu lernen)

EDIT: Haben Sie C-c C-p ausprobiert?

    
___
MartenBE 30.10.2015 12:43
quelle
0

Noch eine weitere Option:

Die Verwendung von C-c C-c funktioniert gut mit fgallinas python.el - pwd ist der Speicherort der Pufferdatei.

    
fgeller 19.02.2012 12:53
quelle
0

Wenn Sie C-c C-c verwenden, wird ein Puffer erstellt (suchen Sie inferior-python). Versuchen Sie, zu diesem Puffer * zu wechseln. Jedes Mal, wenn Sie C-c C-c drücken, wird das Ergebnis dort angezeigt. Sie müssen diesen Puffer sehen, um die Ergebnisse zu erhalten. Verwenden Sie C-x 2, damit Sie beide Puffer gleichzeitig sehen können. Probieren Sie auch C-c C-z (wechseln zur Shell).

* Ich verwende Ibuffer, um Puffer zu verwalten, ist sehr gut. (übrigens, diese Ссылка ist ein ausgezeichneter Ort, um einige Emacs zu lernen)

EDIT: Haben Sie C-c C-p ausprobiert?

    
Ignacio 11.07.2015 03:02
quelle

Tags und Links