Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
fischig
- Beiträge: 4116
- Registriert: 24.12.2019 12:25:08
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von fischig » 18.10.2021 19:36:55
Kann mir jemand jemand diese Zeile
in einem script mit Kopfzeile
erklären?
Zuletzt geändert von
fischig am 18.10.2021 21:39:18, insgesamt 1-mal geändert.
-
smutbert
- Beiträge: 8342
- Registriert: 24.07.2011 13:27:39
- Wohnort: Graz
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: 4116
- Registriert: 24.12.2019 12:25:08
- Lizenz eigener Beiträge: MIT Lizenz
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
-
smutbert
- Beiträge: 8342
- Registriert: 24.07.2011 13:27:39
- Wohnort: Graz
Beitrag
von smutbert » 18.10.2021 21:27:47
Das ist eindeutig ein Bug. Eventuell hat der Entwickler ein
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: 370
- Registriert: 09.12.2016 04:15:59
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: 4116
- Registriert: 24.12.2019 12:25:08
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von fischig » 18.10.2021 21:38:19
Danke sehr!
Genau das war's: die Zeile
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.
-
smutbert
- Beiträge: 8342
- Registriert: 24.07.2011 13:27:39
- Wohnort: Graz
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: 18.10.2021 21:29:55
[...]
Edit: War zu langsam
Doppelt hält besser ☺
-
tobo
- Beiträge: 2336
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 18.10.2021 22:08:56
fischig hat geschrieben: 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.