Anfängerfrage: DOS-Ausgabe im Python Programm ausgeben

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
sunshineh
User
Beiträge: 22
Registriert: Dienstag 3. Januar 2017, 11:21

Hallo,

ich habe die rtl_433 Software installiert und kann im DOS-Fenster mit folgenden Befehl
rtl_433 -G
die Signale meines PIR abrufen:
{"time" : "2018-06-25 09:41:22", "model" : "Generic Remote", "id" : 53535, "cmd" : 222, "tristate" : "1F0F0F111F1!"}
{"time" : "2018-06-25 09:41:22", "model" : "Generic Remote", "id" : 53535, "cmd" : 222, "tristate" : "1F0F0F111F1!"}
{"time" : "2018-06-25 09:41:22", "model" : "Generic Remote", "id" : 53535, "cmd" : 222, "tristate" : "1F0F0F111F1!"}

Nun möchte ich diese Signale in meinem Python Programm abrufen

Code: Alles auswählen

import sys
import os

while 1:
    process = os.popen('rtl_433 -G')
    str = process.read()
    print(str)
Doch so bleibt das Programm stecken in dem Moment, wenn ein Signal kommt. Wie mache ich das richtig?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

`read` liest den gesamten Output, und da das Programm nie endet, dauert das Lesen auch ziemlich lange.

os.popen ist veraltet, statt dessen nimmt man subprocess.Popen:

Code: Alles auswählen

import subprocess
process = subprocess.Popen(['rtl_433', '-G'], stdout=subprocess.PIPE)
for line in process.stdout:
    print(line)
Antworten