Variablen in os.system

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
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Guten Abend
ich habe eine Sprachausgabe in bash geschrieben die mit: "./text2speech.sh Text der vorzulesen ist" aufgerufen wird. Jetzt möchte ich das ganze in ein Python Programm implementieren aber mit unterschiedlichen Werten für den Text. Dieser Wert besteht aus einem normalen String und Variablen. Die Variablen werden serial von einem Arduino ausgelesen, gesplittet und das klappt auch.
Hier mal der Code:

Code: Alles auswählen

    temp = ser.readline()
    print(temp)
    split = temp.decode("UTF-8").split(",", 2)
    print("Licht: ", split[0])
    print("Temperatur: ", split[1])
    ausgabe = "Die Temperatur liegt bei " + split[1] + "Grad und das Licht liegt bei" + split[0]
    os.system("./text2speech.sh " + ausgabe)
Nur gibt er jetzt aus das er den Befehl Grad nicht kennen würde, da er versucht ein neues Programm, mit dem Namen "Grad", auszuführen.
sh2: Grad: not found
BlackJack

@audacity363: Zum ausführen von externen Programmen solltest Du das `subprocess`-Modul verwenden. Sonst können genau solche Sachen passieren, dass die Shell irgendetwas von Deiner Eingabe in einer Art interpretiert, die nicht so gewünscht ist.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

verwende statt `os.system` besser `subprocess.call`:

Code: Alles auswählen

subprocess.call(['./text2speech.sh', ausgabe])
mutetella


P.S. Wobei die Fehlermeldung 'Grad not found' ja auch was hat... :mrgreen:
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Funktioniert leider nicht...
OSError: [Errno 2] No such file or directory: './text2speech.sh '
Die Variable wird nicht eingefügt...
lunar

@audacity363 Nun, ganz offensichtlich befindet sich die Datei "text2speech.sh" nicht in dem Verzeichnis, aus welchem Du das Programm startest. Gebe den absoluten Pfad zu "text2speech.sh" an, oder starte das Programm aus dem Verzeichnis, in welchem sich dieses Skript befindet.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

lunar hat geschrieben:@audacity363 Nun, ganz offensichtlich befindet sich die Datei "text2speech.sh" nicht in dem Verzeichnis, aus welchem Du das Programm startest.
Startest du das Programm z.B. aus `~` wird `./text2speech.sh` als `~/text2speech.sh` interpretiert. Und _nicht_ relativ zum Ort des Python-Skripts, das kannst du z.b. mit

Code: Alles auswählen

import os
os.path.join(os.path.abspath(__FILE__), "text2speech.sh")
erreichen.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Also du würdest so meinen?

Code: Alles auswählen

import os
os.path.join(os.path.abspath(__FILE__), "text2speech.sh", ausgabe)
Oder verstehe ich jetzt was total falsch?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@audacity363: »os.path.join« setzt einen Pfad zusammen, damit »text2speech.sh« auch gefunden wird. Wie meinst Du paßt da »ausgabe« hinzu?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

audacity363 hat geschrieben:Oder verstehe ich jetzt was total falsch?
Ja. Wenn du Funktionen nicht verstehst/kennst, dann lies die Dokumentation. In dem Fall die von subprocess und die von os.path.

Danach kannst du immernoch fragen .. aber rate nicht.
Antworten