michahe
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 824
|
Hallo, nach Wiki beginne ich mit Python:
$ python3 -V
Python 3.6.9 Meine erste Datei PY.py, ausführbar markiert, hat folgenden Code:
#!/usr/bin/env python3
print("Test") Nach Doppelklick auf die Datei erfolgt keine Reaktion, im Terminal im richtigen Verzeichnis:
$ PY.py
PY.py: Befehl nicht gefunden.
$ ls PY.*
PY.py Diese Variante jedoch funktioniert:
$ python3 PY.py
Test Warum und wie kann ich die "direkte" Ausführung ermöglichen? Ratlose Grüße, Michael
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Bei Dateimanagern ist das Ausführen von Skripten oft standardmäßig deaktiviert - da würde ich mal in die Einstellungen schauen. Außerdem hast du das Problem, dass sich das Terminal sofort wieder schließt, sobald das Python-Skript durchgelaufen ist und das da recht schnell passiert, bleibt nicht mal genug Zeit die Ausgabe zu lesen. Zum Starten von ausführbaren Dateien unter Linux:
Wenn du lediglich einen Dateinamen angibst, sieht die Shell in den Verzeichnissen, die in der Umgebungsvariable PATH definiert sind nach und wenn sie darin nichts mit dem Dateinamen findet, sieht man eine entsprechende Fehlermeldung: michahe schrieb: im Terminal im richtigen Verzeichnis:
$ PY.py
PY.py: Befehl nicht gefunden.
Wenn du einen absoluten oder relativen Pfad angibst, sollte die Datei gemäß des gesetzten Shebangs mit dem Python3-Interpreter ausgeführt werden:
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Bei Dolphin fährt man mit Rechtsklick → Aktionen → in Konsole ausführen besser, das öffnet wie es aussieht standardmäßig kein Terminal für Python-Skripte.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Du musst die Datei ausführbar machen:
(x wie eXecutable, chmod wie change modus). Dazu kommt, was andere zum Pfad geschrieben haben, also ausführen mit
Der Punkt vorne für das aktuelle Verzeichnis, der Slash als Trenner zw. Verzeichnis- und Dateiname. Beides gilt für jedes Programm und ist nicht spezifisch für Python.
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 824
|
Danke! Leider bin ich nicht wirklich schlauer: Ausführbar sollte die Datei sein:
RechnerName:/mnt/Daten$ ls -l *.py
-rwxrwxr-x 1 meinName meinName 186 Nov 1 14:41 PY.py Ich arbeite in /mnt/Daten, die Datei PY.py ist in /mnt/Daten.
printenv gekürzt
PROFILEHOME=/mnt/Daten/
PWD=/mnt/Daten
HOME=/home/meinName
KONSOLE_PROFILE_NAME=meinName
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Dolphin: fährt man mit Rechtsklick → Aktionen → in Konsole ausführen
Funktioniert! Doppelklick funktioniert nicht. Einstellung ist "Ausführung Skripte oder .desktop" OHNE Bestätigung.
./PY.py
Funktioniert! Aber: Eine ausführbare bsh.sh in diesem Verzeichnis startet per Doppelklick und im Terminal mit
RechnerName:/mnt/Daten$ bash bsh.sh Zufrieden bin ich damit nicht ...
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 824
|
Jetzt habe ich in meine PY.py ergänzt:
from turtle import *
und erhalte
File "./PY.py", line 13, in <module>
from turtle import *
File "/usr/lib/python3.6/turtle.py", line 107, in <module>
import tkinter as TK
ModuleNotFoundError: No module named 'tkinter'
Muss ich /etc/environment ergänzen um
:/usr/lib/python3.6
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Nein, du musst das Paket python3-tk installieren. Die Ubuntu- bzw. Debian-Maintainer haben da viel Modularisiert und man muss da bei Bedarf fehlende Dinge nachinstallieren.
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 824
|
Danke seahawk1986, was würde ich ohne Deine geduldige Hilfen machen? Nein, du musst das Paket python3-tk installieren.
Funktioniert! Nun wünsche ich mir "nur" noch eine "vernünftige" Methode, ein Python-Programm auszuführen:
Die Methode
$ ./PY.py
gibt nach Ablauf den $ Prompt im Terminal zurück, ich "mag" die Methode trotzdem nicht. Dolphin > Aktionen > In Konsole ausführen lässt das Programm ablaufen, aber es scheint "abgestürzt", man kann beliebigen Text ins Fenster tippen:
Test
Hallo
^[[A^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[A # Hinweis: Cursor-Tasten ausgelöst
exit
unsinn
Fenster schließen nur mit "X" in der Fensterleiste. Könnte mir die environment-Erweiterung dabei helfen?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Du musst dir halt überlegen, was dein Skript macht bzw. machen soll - wenn du es aus einer Shell heraus im Vordergrund startest, wird es die Shell so lange belegen, bis es beendet wird (z.B. indem man das letzte Fenster der generierten GUI schließt). Und wenn du Eingaben auf stdin nicht im Programm (am besten asynchron, wenn ein GUI-Framework eine Dauerschleife ausführt) behandelst, kannst du beliebigen Unsinn ins Terminal schreiben, ohne dass es einen Effekt auf das Programm hat. Wenn dein Programm stdin nicht aktiv nutzt, kannst du es in den Hintergrund schicken, ohne dass es hängen bleibt: Bash (Abschnitt „Hintergrundprozesse“) Die gängige Methode um Programme durch die Desktop-Umgebung starten zu lassen sind .desktop-Dateien.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
michahe schrieb:
Dolphin > Aktionen > In Konsole ausführen lässt das Programm ablaufen, aber es scheint "abgestürzt", man kann beliebigen Text ins Fenster tippen:
Test
Hallo
^[[A^[[B^[[B^[[B^[[B^[[B^[[B^[[B^[[A # Hinweis: Cursor-Tasten ausgelöst
exit
unsinn
Fenster schließen nur mit "X" in der Fensterleiste. Könnte mir die environment-Erweiterung dabei helfen?
Mit solchen Eingaben musst Du übrigens ein wenig vorsichtig sein. Nachdem Dein Programm beendet ist, wird die Konsole die Eingaben nachträglich abarbeiten. ☺
Wie seahawk richtig schreibt ist die Konsole nur durch Dein Programm blockiert. Mit Ctrl+Z kannst Du das Programm im Vordergrund (./Py.py) anhalten, und dann mit "bg" in den Hintergrund schicken. Dann könntest Du in die geöffnete Konsole was reinschreiben. Aber primär sollte die Fragestellung sein, was Du eigentlich willst - eine Ausgabe Deines Programms lesen, dann ist es sinnvoll eine blockiertes Terminalfenster zu haben, oder das interessiert Dich nicht, dann gibt es keinen Grund überhaupt eines zu öffnen.
|
michahe
(Themenstarter)
Anmeldungsdatum: 12. Dezember 2013
Beiträge: 824
|
Danke, aber ... Du musst dir halt überlegen, was dein Skript macht bzw. machen soll
ich will mich erst einmal nur in Python einarbeiten und ein paar Test-Skripte ausführen. Eine .desktop macht m.E. dafür keinen Sinn. Wie macht Ihr da mit derartigen Tests?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Also wenn ich am laufenden Band Programme schreibe, die ich rasch austesten will, dann nächstes Programm, nächstes Programm, oder Änderung auf Änderung, dann entwickle ich sie, wenn sie nicht zu umfangreich sind, in einem Editor wie Geany, wo ich festlegen kann, dass beim Klick auf das entsprechende Icon die Datei gespeichert und ausgeführt wird, und Textausgaben unten in einem extra Fensterbereich ausgegeben werden. Dann muss ich nicht jede neue Datei ausführbar machen. Das bequeme Starten und Testen ist ja essenziell, dass man den Spaß nicht verliert und vorwärtskommt.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Statt Geany könnte auch Visual Studio Code einen Versuch wert sein (gibt es als Snap: https://snapcraft.io/code), der Language Server von Microsoft für Python ist ziemlich gut und Hilft grobe Fehler frühzeitig zu erkennen und die Integration des Debuggers in die GUI ist ebenfalls gut gelöst.
|
Axel-Erfurt
Anmeldungsdatum: 18. Mai 2016
Beiträge: 1347
|
seahawk1986 schrieb: Statt Geany könnte auch Visual Studio Code einen Versuch wert sein (gibt es als Snap: https://snapcraft.io/code), der Language Server von Microsoft für Python ist ziemlich gut und Hilft grobe Fehler frühzeitig zu erkennen und die Integration des Debuggers in die GUI ist ebenfalls gut gelöst.
Dann aber python.linting.enabled ausschalten sonst gibt es eine Menge sinnfreie sogenannte "Problems" aus.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
seahawk1986 schrieb: Statt Geany könnte auch Visual Studio Code einen Versuch wert sein (gibt es als Snap: https://snapcraft.io/code), der Language Server von Microsoft für Python ist ziemlich gut und Hilft grobe Fehler frühzeitig zu erkennen und die Integration des Debuggers in die GUI ist ebenfalls gut gelöst.
Ist das nicht ein bischen fett, träge und für den Anfänger überfordernd? Das ist doch sicher überfrachtet mit Einstelloptionen.
|