Resultat Programm abgreifen

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
Benutzeravatar
mobby
User
Beiträge: 76
Registriert: Donnerstag 17. April 2014, 09:43

Hallo,

ich stehe vor folgendem Problem:

Ich habe eine auf Linux laufende App, wenn ich diese App in der Konsole ausführe, wird ein Wert in der Konsole ausgegeben. Jetzt möchte ich diesen Konsolenwert über Python abgreifen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os

value = os.system("./app")
print value
Problem dabei ist, dass ich zwei Ausgaben bekomme:
1. Zeile: Der gewünschte Wert
2. Zeile: 0
Das heißt es übergibt den Wert nicht an die Variable ... was mache ich falsch?

Danke für Hilfe!

Gruß
mobby
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Das was da in value landet ist der Rückgabewert des Programms.

Verwende nicht os.system sondern das subprocess-modul. Damit kannst du einen externen Prozess starten und dessen Ein- und Ausgabe kontrollieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Die Dokumentation sagt es ja schon:
On Unix, the return value is the exit status of the process encoded in the format specified for wait(). Note that POSIX does not specify the meaning of the return value of the C system() function, so the return value of the Python function is system-dependent.

On Windows, the return value is that returned by the system shell after running command. The shell is given by the Windows environment variable COMSPEC: it is usually cmd.exe, which returns the exit status of the command run; on systems using a non-native shell, consult your shell documentation.
Wie sparrow schon sagte, nutze besser ``subprocess`` :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
mobby
User
Beiträge: 76
Registriert: Donnerstag 17. April 2014, 09:43

Danke für den Tipp! Folgendermaßen läufts:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess

print subprocess.check_output("./app", shell=True)
Das shell=True macht mir aufgrund der vielen Warnungen zwar etwas Angst, aber es funktioniert nur mit.
Benutzeravatar
Balmung
User
Beiträge: 44
Registriert: Sonntag 17. März 2013, 18:36

Es wäre angebracht die Dokumentation (und besonders die Beispiele) mal genauer durchzulesen, dann würdest du auch feststellen, dass die subprocess Funktionen als ersten Parameter in der Regel eine Liste erwarten.

Code: Alles auswählen

print subprocess.check_output(["./app"])
»Honk Honk«
Antworten