ubuntuusers.de

Python: Programm wird nicht ausgeführt

Status: Ungelöst | Ubuntu-Version: Kubuntu 18.04 (Bionic Beaver)
Antworten |

michahe

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

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: 11261

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:

./PY.py 

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11261

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

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Du musst die Datei ausführbar machen:

1
chmod +x Py.py

(x wie eXecutable, chmod wie change modus).

Dazu kommt, was andere zum Pfad geschrieben haben, also ausführen mit

1
./Py.py

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: 857

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: 857

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: 11261

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: 857

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: 11261

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

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

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: 857

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

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

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: 11261

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

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

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.

Antworten |