Pfade/Befehle unter Linux

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
snowflake
User
Beiträge: 93
Registriert: Mittwoch 9. November 2016, 15:46

Hallo zusammen,

ich habe ein Skript geschrieben, welches unter Windows funktioniert. Unter Linux (Ubuntu 18.04) will mir das einfach nicht gelingen. Kann mir jemand sagen, wie ich die Pfadangaben bzw. Befehle schreiben muss, so dass es unter Linux funktioniert? Im Grunde genommen geht es darum, eine E-Mail mit Thunderbird bzw. eine erzeugte Exceldatei mit LibreOffice zu öffnen.

Code: Alles auswählen


VerzThunderbird = "C:\\Program Files (x86)\\Mozilla Thunderbird\\thunderbird.exe"

def MailThunderbird(Mailadresse,Betreff,Inhalt,Anhang):
    mail = "to='{}', subject='{}',body='{}', attachment='{}'".format(Mailadresse, Betreff, Inhalt, Anhang)
    subprocess.Popen([VerzThunderbird, "-compose", mail])

Code: Alles auswählen

dbname = "LNW.xlsx"
path = os.getcwd()
neuername = path + "\\Berichte\\" + dbname[:-5] + time.strftime("_%Y%m%d_%H%M%S.xlsx")
pathprog = "D:\Daten\Tool\LibreOfficePortable61\LibreOfficeCalcPortable.exe"
subprocess.Popen([pathprog, neuername])
Vielen Dank.

snowflake
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snowflake: Das funktioniert unter Linux aus dem gleichen Grund nicht, warum das bei mir unter Windows nicht funktioniert: Die Pfade sind halt absolut und auf *Dein* Windows festgelegt. Ich habe zum Beispiel unter Windows gar kein ``D:``-Laufwerk. Und unter Linux gibt es das Laufwerkskonzept so auch gar nicht. Zudem ist es natürlich keine gute Idee plattformspezifische Pfadtrenner zu verwenden wenn das auf mehreren Plattformen laufen soll und Zeichenkettenoperationen statt `os.path`-Funktionen (oder `pathlib`).
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
snowflake
User
Beiträge: 93
Registriert: Mittwoch 9. November 2016, 15:46

Hallo __Blackjack__,

ich habe die absoluten Pfade drin gelassen, damit man sieht, was ich unter Windows gemacht habe. Das dass nicht unter Linux funktioniert, ist mir klar.

Mir ist aber nicht klar, wie ich das mit den Pfaden und Programmen systemunabhängig machen kann. Mit os.path kann ich momentan nicht erkennen, wie es gehen soll.

Viele Grüße

snowflake
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snowflake: Das kannst Du nicht systemunabhängig machen. Also ausser den Pfad den Du da zusammensetzt, eben mit `os.path`-Funktionen.

Einzige Möglichkeit wäre bei den Programmen in Deinem Programm nicht mit Pfaden zu arbeiten, sondern nur mit den Programmnamen und als Anforderung zu stellen, dass die im Suchpfad des jeweiligen Systems für Programme zu finden sind. Alternativ oder zusätzlich kann man das für den Benutzer konfigurierbar machen. Als Konstanten im Quelltext, oder als Kommandozeilenargumente, oder als Konfigurationsdatei. Oder eine beliebige Kombination davon.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
snowflake
User
Beiträge: 93
Registriert: Mittwoch 9. November 2016, 15:46

Hallo __blackjack__,

was ich aber machen könnte wäre herauszufinden, um welches Betriebssystem es sich handelt und dann mehrere Pfade bereithalten.

Code: Alles auswählen

import platform
platform.system()
Die absoluten Pfade zu den Programmen müsste ich dann, wie von Dir vorgeschlagen, für einzelne Benutzer konfigurierbar machen (z. B. parser). Wo finde ich denn in Ubuntu jene Dateien zum Starten von Thunderbird und LibreOffice?

Vielen Dank und sonnige Grüße.

snowflake
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snowflake: Unter Linux würde ich da gar keine Pfade ”suchen”. Ausführbare Programme erwartet man da eigentlich immer im Suchpfad für ausführbare Programme. Also man lässt dort letztlich das System den Pfad finden.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
snowflake
User
Beiträge: 93
Registriert: Mittwoch 9. November 2016, 15:46

Hallo __blackjack__,

Dein Vorschlag klingt gut. Kannst Du mir auf die Sprünge helfen wie das geht?

VG snowflake
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snowflake: Wie was geht? Du rufst einfach die Programme auf, über den Namen des Programms (thunderbird, libreoffice), ohne irgendwelche Pfade.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
snowflake
User
Beiträge: 93
Registriert: Mittwoch 9. November 2016, 15:46

Hallo __blackjack__,

über die Namen hat es in Ubuntu wunderbar funktioniert. Ich muss halt dann eine Variante für Windows und eine für Linux machen. Das ist aber ok. Du hast mir damit sehr geholfen.

Vielen Dank für Deine Unterstützung und einen schönen Abend.

snowflake
Antworten