Seite 1 von 1

Resultat Programm abgreifen

Verfasst: Dienstag 24. Juni 2014, 16:04
von mobby
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

Re: Resultat Programm abgreifen

Verfasst: Dienstag 24. Juni 2014, 16:10
von sparrow
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.

Re: Resultat Programm abgreifen

Verfasst: Dienstag 24. Juni 2014, 16:12
von Hyperion
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`` :-)

Re: Resultat Programm abgreifen

Verfasst: Dienstag 24. Juni 2014, 16:39
von mobby
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.

Re: Resultat Programm abgreifen

Verfasst: Dienstag 24. Juni 2014, 17:04
von Balmung
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"])