'echo -e' + subprocess

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
HeAdLeSs
User
Beiträge: 22
Registriert: Dienstag 8. März 2016, 09:22

Hallo zusammen.

Ich möchte ein Shell Kommando mit subprocess ausführen. Dabei möchte ich Zeilenumbrüche im Text haben. Das geht mit 'echo -e'. Nur leider funktioniert das nicht wenn ich es im subprocess mache. Was mache ich da falsch?
import subprocess

text = "Hallo\nhier ein Test\n\nText."
inputcommand = 'echo -e "%s" | gammu-smsd-inject TEXT %s' % (text, number) #speak aloud
p = subprocess.Popen(inputcommand, stdout=subprocess.PIPE, shell=True)
Vielen Dank.
HeAdLeSs
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@HeAdLeSs: wenn Du Daten einem Programm übergeben willst, machst Du das über Pipes:

Code: Alles auswählen

import subprocess

text = "Hallo\nhier ein Test\n\nText."
command = ['gammu-smsd-inject', 'TEXT', str(number)]
p = subprocess.Popen(command, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
p.stdin.write(text)
p.stdin.close()
HeAdLeSs
User
Beiträge: 22
Registriert: Dienstag 8. März 2016, 09:22

@Sirius3
Hab es gerade ausprobiert. Funktioniert 1a. Danke.
Habe es aber noch ein wenig abgeändert, da stdin.write wohl Probleme machen kann (http://stackoverflow.com/questions/1635 ... n-argument).

Code: Alles auswählen

    command = ['gammu-smsd-inject', 'TEXT', str(number)]
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
    output = p.communicate(input=text)[0]
Antworten