Seite 1 von 1

Emacs unter Python nutzen!

Verfasst: Donnerstag 27. November 2014, 01:11
von Basilius Sapientia
Servus!

Ich fange ganz neu an mit Python in Kombination mit Emacs unter Linux Mint 17 Qiana. Ich habe folgendes Script:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

nu1=1318*100 #m^(-1)
nu2=750*100 #m^(-1)
nu3=1618*100 #m^(-1)
c= 299792458 #m/s

E_0=(1/2)*((nu1+nu2+nu3)/c);
print(E_0)
Dann kombiliere ich es, indem ich oben in der Leiste auf Tools>Compile... drücke. Daraus ergibt sich, dies hier:

Code: Alles auswählen

-*- mode: compilation; default-directory: "~/Schreibtisch/Mikroskopisk Fysisk Kemi/" -*-
Compilation started at Thu Nov 27 01:03:18

make -k matemaik.py
make: Für das Ziel »matemaik.py« ist nichts zu tun.

Compilation finished at Thu Nov 27 01:03:18
Also gab es offenbar keine Fehler und hat alles getan was ich wollte: ohne mir das Ergebnis zu liefern. Denn der Pyhtoncode müsste richtig sein. Was soll ich tun? Was mache ich falsch? Dies hier ist scheinbar eher eine Emacs frage, oder?

Re: Emacs unter Python nutzen!

Verfasst: Donnerstag 27. November 2014, 01:21
von BlackJack
@Basilius Sapientia: Python muss nicht extra kompiliert werden, und der Menüpunkt macht in diesem Fall auch gar nichts. Das steht da ja sogar das nichts getan wurde: ``make: Für das Ziel »matemaik.py« ist nichts zu tun.``

Der Menüpunkt scheint nicht Python-spezifisch zu sein, sondern ruft einfach nur ``make`` auf mit den Dateinamen als Target. Dazu müsste man dann wohl auch eine `Makefile`-Datei schreiben. Mit dem entsprechenden Target. Aber was sollte man da als Anweisung schreiben?

Die Datei ist syntaktisch falsch. Beim ``import`` gehören Kommas zwischen mehrere Modulnamen. Allerdings empfiehlt der Style-Guide eine Importanweisung pro Modul zu verwenden. Und von den Importen wird dann ja auch gar nichts verwendet, also könnte man das komplett weg lassen. Oder soll das *ein* Modulname sein? Da dürfen dann natürlich keine Leerzeichen enthalten sein.

Falls das Python 2 ist gehören beim ``print`` keine Klammern um das ”Argument”.

Und vielleicht wolltest Du da auch den Wert von `E_0` ausgeben statt einer Zeichenkette. Oder beides.

Re: Emacs unter Python nutzen!

Verfasst: Donnerstag 27. November 2014, 03:28
von Basilius Sapientia
BlackJack hat geschrieben:Aber was sollte man da als Anweisung schreiben?
Vielen Dank für deine Kommentare. Das mit numpy as np habe ich leider falsch reinkopiert aus meiner Quelldatei, auch keine Ahnung, wie das Geschehen konnte. Print habe ich jetzt auch korrigiert. Allerdings wäre die dringendere Frage, was ich drücken/tuen muss, damit ich ein Ergebnis erhalte in Emacs?

LG

Re: Emacs unter Python nutzen!

Verfasst: Donnerstag 27. November 2014, 04:32
von cofi
Rufst du `M-x compile` auf, wird ausgefuehrt was die Variable `compile-command` enthaelt.

Was du machen solltest, haengt davon ab, was du eigentlich machen willst. Natuerlich kannst du `compile-command` file- bzw dir-local anpassen, aber das macht vielleicht keinen Sinn.

Andere Moeglichkeiten sind dein Skript in einer Shell (`M-x eshell`) ganz normal zu starten oder in der Shell von `python-mode` evaluieren zu lassen (Menuepunkt `Python` hat viele Varianten).

Re: Emacs unter Python nutzen!

Verfasst: Donnerstag 27. November 2014, 05:55
von Basilius Sapientia
cofi hat geschrieben:Was du machen solltest, haengt davon ab, was du eigentlich machen willst.
Ich würde gerne 1. eine Region evaluieren und 2. würde ich auch gerne den gesamten Code interpretieren lassen. Was muss ich drücken, damit Emacs dies macht? Und was muss ich machen, damit Emacs mir diese Ergebnisse zeigt?

LG

Re: Emacs unter Python nutzen!

Verfasst: Donnerstag 27. November 2014, 09:41
von cofi
Alle Keybindings siehst du mit `C-h b`, im konkreten Fall ist es `C-c C-r` um die Region und `C-c C-c` um den Buffer-Inhalt zu evaluieren.

Re: Emacs unter Python nutzen!

Verfasst: Donnerstag 27. November 2014, 23:39
von Basilius Sapientia
@cofi vielen Dank. Allerdings bleibt das Problem, dass ich das Resultat (da müsste doch ein Resultat erscheinen mit print(E_0), oder?) nicht erscheint. Ich benutze den C-c-C-c Code. Dann muss ich verschiedenes drücken und dann steht, dass alles Erfolgreich verlaufen ist (unterste kleine Spalte). Doch ein Ergebnis sehe ich leider nicht. Was muss ich drücken, damit ich ein Ergebnis sehe?

Wenn ich C-c C-c gedrückt habe erscheint etwas das auf -i endet, dann drücke ich Enter und dann erscheint dies hier. Aber kein Fenster erscheint mit Fehlermeldungen/Ergebnis. Was tun?
Bild

Re: Emacs unter Python nutzen!

Verfasst: Freitag 28. November 2014, 00:15
von BlackJack
@Basilius Sapientia: Hat jetzt nichts mit dem eigentlichen Problem zu tun, aber falls das Python 2 ist, dann sind die Klammern bei ``print`` wie gesagt falsch. Zumindest solange man nicht `print_function` aus dem `__future__`-Modul importiert. Ausserdem sind da ganzzahlige Divisionen enthalten die sicher nicht das Ergebnis liefern welches Du erwartest. Zumindest solange man nicht `division` aus dem `__future__`-Modul importiert. :-)

Sollte das Python 3 sein, dann ist die erste Zeile sehr wahrscheinlich falsch, denn das Python 3-Binary heisst in der Regel ``python3`` und nicht ``python``.

Re: Emacs unter Python nutzen!

Verfasst: Freitag 28. November 2014, 23:28
von cofi
Die Befehle schicken den Code an einen eigenen Interpreter und dort siehst du das Ergebnis. `C-c C-z` sollte dir die entsprechende Shell anzeigen.