Seite 1 von 1

Modul mit Klick ausführen

Verfasst: Freitag 7. Februar 2025, 17:42
von Goswin
Ich benutze Linux Mint_20.3 Una, und Python_3.8.

Mein Python-Modul erstellt eine Textdatei datB anhand einer Textdatei datA, und hat die Form

Code: Alles auswählen

#! /usr/bin/python3

#codezeilen
#codezeilen

def main():
   #codezeilen

if __name__ == '__main__': main()
und wenn ich ein Terminal öffne und an den Ort des Moduls gehe, kann ich es ohne weiteres mit ./meinModul01.py ausführen - alles richtig.

Nun möchte ich aber nicht immer ein Terminal öffnen, sondern das Modul mit einem Klick auf die Quelldatei laufen lassen, was laut Internetsuche möglich sein soll. Warum passiert bei mir garnichts (es entsteht keine Datei datB), wenn ich darauf klicke oder wenn ich per Maustaste "öffnen mit Python3" auswähle?

Noch erstaunlicher: Ich habe ein anderes Modul mit tkinter, nennen wir es meinModul02.py, welches die gleiche Form hat und mit einem einfachen Mausklick problemlos ausgeführt werden kann.

Re: Modul mit Klick ausführen

Verfasst: Freitag 7. Februar 2025, 19:02
von __blackjack__
@Goswin: Ich vermute mal das *wird* ausgeführt und scheitert dann daran, dass das aktuelle Arbeitsverzeichnis ein anderes ist. Wie greifst Du denn auf `datA` zu? Einfach relativ zum Arbeitsverzeichnis oder explizit relativ zum Modul über `__file__`, oder wenigstens über einen absoluten Pfad?

Re: Modul mit Klick ausführen

Verfasst: Freitag 7. Februar 2025, 20:07
von Goswin
@blackjack:
Hier mehr Einzelheiten:

Code: Alles auswählen

#! /usr/bin/python3
##coding: UTF-8

def baue_datei(datA,datB):
   dptA = open(datA,'r')
   dptB = open(datB,'w')
   #
   alter_Inhalt = dptA.readline()[-1]
   #codezeilen
   #codezeilen
   dptB.write(f"{neuer_Inhalt}\n")
   #
   dptA.close()
   dptB.close()

def main():
   datA_str = '../ordnerA/datA'
   datB_str = 'datB'
   #
   baue_datei(datA_str,datB_str)

if __name__ == '__main__': main()

Re: Modul mit Klick ausführen

Verfasst: Freitag 7. Februar 2025, 21:19
von Goswin
@blackjack:
Einen Zugriff "relativ zum Modul über `__file__`" kenne ich nicht und wüsste garnicht, wie man das macht...

Re: Modul mit Klick ausführen

Verfasst: Samstag 8. Februar 2025, 07:12
von Dennis89
Hallo,

Code: Alles auswählen

from pathlib import Path


def main():
    datA = Path(__file__).parents[1] / "ordnerA/datA"
    print(datA)


if __name__ == '__main__':
    main()
`pathlib` ist hier ganz nützlich:
https://docs.python.org/3/library/pathl ... th.parents

Grüße
Dennis