Seite 1 von 1

"echo -e"-Befehl in Python übersetzen

Verfasst: Montag 13. Oktober 2014, 09:31
von Europython
Hallo zusammen,

ich habe folgendes Problem:
- ich habe einen Befehl in einem linux Bash-Skript, welcher folgendermaßen lautet:
echo -e '1\n0.0\n2\n\n3\n4\n0\n' | mset EDI-M109

Diesen würde ich nun gerne in Python übernehmen. Es geht dabei um das Öffnen einer Benutzeroberfläche, bei der über die
Ziffern 1 bis 4 (teilweise gibt man zwischendurch noch den Anstellwinkel an - hier 0.0, etc.) diverse Eingaben gemacht werden können. In diesem Fall sollen die Befehle direkt hintereinander ausgeführt werden.
Erst hatte ich über subprocess.call alle Eingaben getrennt gemacht, das Problem ist jedoch, dass sich durch Ausführen der Ziffer 1 ein neues Fenster öffnet und ich daraufhin dann keine weiteren Eingaben mehr in der Konsole machen kann.
Alternativ wäre mir auch damit geholfen, wie man ein aktives Fenster minimiert.

Vielen Dank für jegliche Hilfe!

Re: "echo -e"-Befehl in Python übersetzen

Verfasst: Montag 13. Oktober 2014, 09:35
von BlackJack
@Europython: Das ist ein Fall für `subprocess.Popen`. `call()` bietet einem ja gar keine Möglichkeit die Daten in die Standardeingabe des anderen Prozesses zu „pipen”.

Edit (ungetestet):

Code: Alles auswählen

#!/usr/bin/env python
from __future__ import absolute_import, division, print_function
from subprocess import PIPE, Popen


def main():
    mset_process = Popen(['mset', 'EDI-M109'], stdin=PIPE)
    mset_process.communicate('1\n0.0\n2\n\n3\n4\n0\n')


if __name__ == '__main__':
    main()

Re: "echo -e"-Befehl in Python übersetzen

Verfasst: Montag 13. Oktober 2014, 09:53
von Europython
Okay, habe gerade versucht, das mit Popen zu lösen, kriege es aber nicht hin.
Was genau sind denn dann meine Eingaben für Popen?
Tut mir leid, beschäftige mich erst seit einer Woche mit Python und mein Know-How ist ziemlich dürftig...

Re: "echo -e"-Befehl in Python übersetzen

Verfasst: Montag 13. Oktober 2014, 09:54
von Europython
Ah okay, habe gerade noch den Code gesehen, danke dir!