(gelöst) python-Script (otrdecoder in bullseye)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
fischig
Beiträge: 3639
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

(gelöst) python-Script (otrdecoder in bullseye)

Beitrag von fischig » 18.10.2021 19:36:55

Kann mir jemand jemand diese Zeile

Code: Alles auswählen

decoderpath = dirname(realpath(sys.argv[0]))
in einem script mit Kopfzeile

Code: Alles auswählen

#!/usr/bin/env python3
erklären?
Zuletzt geändert von fischig am 18.10.2021 21:39:18, insgesamt 1-mal geändert.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: python-Script

Beitrag von smutbert » 18.10.2021 20:08:25

Sozusagen von innen nach außern:
  • sys.argv[0]
    sys.argv ist der komplette Aufruf des Programms/Skripts in Form einer Liste. [0] ist das erste Element dieser Liste und das ist also der Name des Programms selbst (so wie es aufgerufen worden ist).
    Wenn etwas über einen symbolischen Link oä aufgerufen worden ist, liefert das also den Pfad und Dateinamen des Links und nicht das der eigentlichen ausführbaren Datei.
  • realpath(sys.argv[0])
    realpath liefert den „richtigen“ Pfad zu einer Datei. Hier wird also sichergestellt, dass nicht mit dem Pfad eines eventuellen symbolischen Links weitergearbeitet wird.
  • dirname(realpath(sys.argv[0]))
    liefert nur mehr den Pfad ohne Datei ( dirname('/bin/bash') sollte zB '/bin' liefern).

fischig
Beiträge: 3639
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: python-Script

Beitrag von fischig » 18.10.2021 21:17:42

Also: Im readme steht:

Code: Alles auswählen

* GUI 1 (otrdecoder-gui.ry):
Für die GUI des otrdecoders ist python 3 mit dem Paket tkinter notwendig.
Dieses Paket sollte auf allen gängigen Distributionen erhältlich sein.
Um die GUI zu starten, muss man
	<Dekoderverzeichnis>/otrdecoder-gui.ry
bzw.
	python <Dekoderverzeichnis>/otrdecoder-gui.ry
ausführen.
Ich erhalte in beiden Fällen (python habe ich durch python3ersetzt) diese Fehlermeldung mit der ich nichts anzufangen weiß:

Code: Alles auswählen

    decoderpath = dirname(realpath(sys.argv[0]))
NameError: name 'sys' is not defined

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: python-Script

Beitrag von smutbert » 18.10.2021 21:27:47

Das ist eindeutig ein Bug. Eventuell hat der Entwickler ein

Code: Alles auswählen

import sys
vergessen. Du könntest die Datei einmal mit einem Texteditor öffnen und obige Zeile irgendwo zu den sonst bereits vorhandenen "import ..." Zeilen dazuschreiben.

rodney
Beiträge: 334
Registriert: 09.12.2016 04:15:59

Re: python-Script

Beitrag von rodney » 18.10.2021 21:29:55

Dann such mal am Anfang des Skripts nach import sys oder import from sys ...

Edit: War zu langsam

fischig
Beiträge: 3639
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: python-Script

Beitrag von fischig » 18.10.2021 21:38:19

Danke sehr! :THX: Genau das war's: die Zeile

Code: Alles auswählen

import sys
hat gefehlt.

Und jetzt versucht doch bitte noch zu erklären, was ich da gemacht habe.
In Pascal hätte ich gesagt, sys ist ein Record und argv ist ein Element dieses Records in Form eines Arrays und [0] ist dann wieder das 1. Element des Arrays argv.

Das sagt mir dann aber immer noch nicht viel über den Record sys (falls diese Pascal-Analogie überhaupt sinnvoll ist).
Zuletzt geändert von fischig am 18.10.2021 21:49:50, insgesamt 1-mal geändert.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: (gelöst) python-Script (otrdecoder in bullseye)

Beitrag von smutbert » 18.10.2021 21:44:37

sys ist ein python-Modul, also fertiger python-Code, der Klassen, Methoden, Funktionen... definiert, unter anderem sys.argv. Um das nutzen zu können muss das Modul im python-Programm geladen („importiert“) werden und das erledigen die import-Zeilen.
rodney hat geschrieben: ↑ zum Beitrag ↑
18.10.2021 21:29:55
[...]
Edit: War zu langsam
Doppelt hält besser ☺

tobo
Beiträge: 1990
Registriert: 10.12.2008 10:51:41

Re: python-Script

Beitrag von tobo » 18.10.2021 22:08:56

fischig hat geschrieben: ↑ zum Beitrag ↑
18.10.2021 21:38:19
In Pascal hätte ich gesagt, sys ist ein Record
Die Pascal-Analogie wäre, dass sys eine in der uses-Klausel eingebundene Unit wäre.

Antworten