Frage

Ich habe für eine lange Zeit mit zsh verliebt, und in jüngerer Zeit die Vorteile der ipython interaktiven Interpreter Entdeckung über python selbst ich habe. In der Lage zu cd , bis ls , auf run oder ist in der Tat sehr praktisch. Aber jetzt fühlt es sich seltsam, eine solche plumpen Schale zu haben, wenn in ipython, und ich frage mich, wie ich meine zsh integrieren konnte und meine ipython besser.

Natürlich könnte ich meine .zshrc schreiben und alle meine Skripte in Python, und die meisten meiner Shell-Welt von ipython emulieren, aber es fühlt sich nicht richtig. Und ich bin natürlich nicht bereit ohnehin eine Hauptschale verwenden ipython wie.

So, hier kommt meine Frage: Wie arbeiten Sie effizient zwischen Shell und Ihrer Python-Befehlsschleife? Fehle ich einige offensichtliche Integrationsstrategie? Soll ich alles tun, was in Emacs?

War es hilfreich?

Lösung

Ich habe diese Frage auf der zsh Liste und diese Antwort für mich gearbeitet. YMMV.

In genutils.py nach der Zeile

  

wenn nicht debug:

die Zeile entfernen:

  

stat = os.system (cmd)

Ersetzen Sie es mit:

  

stat =   subprocess.call (cmd, Shell = True, ausführbare = '/ bin / zsh')

Sie sehen, ist das Problem, dass der „!“ Aufruf verwendet os.system, um sie auszuführen, die Standardwerte alt / bin / sh Manky.

Wie ich schon sagte, es funktionierte für mich, obwohl ich nicht sicher bin, was hinter den Kulissen borked wurde.

Andere Tipps

Sie können Shell-Befehle ausführen, indem sie mit einem Ausrufezeichen und erfassen die Ausgabe in einem Python-Variable zu starten. Beispiel: Auflistung Verzeichnisse in Ihrem /tmp Verzeichnis:

ipy> import os
ipy> tmplist = !find /tmp
ipy> [dir for dir in tmplist if os.path.isdir(dir)]

Die Liste Objekt ist ein spezielles ipython Objekt mit vielen nützlichen Methoden. Beispiel: Auflisten von Dateien mit der Endung .pdf

ipy> tmplist.grep(lambda a: a.endswith('.pdf')) # using a lambda
ipy> tmplist.grep('\.pdf$') # using a regexp

Es gibt eine Menge Dinge, die Sie durch das Lesen der Liste der Magie Befehle tun können:

ipy> %magic

Sehen Sie die Schalenabschnitt rel="nofollow von die IPython Dokumentation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top