[Erledigt] QX Aufruf mit Ausgabe

Begonnen von Det20, 02 März 2022, 20:20:09

Vorheriges Thema - Nächstes Thema

Det20

Hallo,

ich rufe von FHEM eine PY Datei auf und möchte die Ausgabe verarbeiten. Wenn alles rund läuft, dann erhalte ich das Ergebnis von "Print" (aus der PY Datei). Läuft die Datei auf einen Fehler, dann erhalte ich in FHEM nichts, also nur einen leeren String. In der Shell sehe ich jedoch die Fehlermeldung. Ist das normal? Oder wie erhalte ich dann die Fehlermeldung auch in FHEM?


my $ret = qx(sudo /home/pi/starlink/reboot.py);


die PY:


#!/usr/bin/python3

import grpc

from spacex.api.device import device_pb2
from spacex.api.device import device_pb2_grpc

with grpc.insecure_channel("192.168.100.1:9200") as channel:
    stub = device_pb2_grpc.DeviceStub(channel)
    response = stub.Handle(device_pb2.Request(get_status={}))

status = {
    "swver": response.dish_get_status.device_info.software_version,
    "status": response.dish_get_status.state,
    "uptime_sec":  response.dish_get_status.device_state.uptime_s,
    "uptime_min":  round(response.dish_get_status.device_state.uptime_s/60,1),
    "uptime_std":  round(response.dish_get_status.device_state.uptime_s/60/60,1),
    "speed_download": round(response.dish_get_status.downlink_throughput_bps/1000000, 2),
    "speed_upload": round(response.dish_get_status.uplink_throughput_bps/1000000, 2),
    "speed_ping": round(response.dish_get_status.pop_ping_latency_ms),
}

print(status)

betateilchen

Zitat von: Det20 am 02 März 2022, 20:20:09
Wenn alles rund läuft, dann erhalte ich das Ergebnis von "Print" (aus der PY Datei). Läuft die Datei auf einen Fehler, dann erhalte ich in FHEM nichts, also nur einen leeren String. In der Shell sehe ich jedoch die Fehlermeldung. Ist das normal?

Ja. Der Grund liegt in den Unterschieden der drei standard streams in Linux (stdin, stdout, stderr)
Du musst also stderr nach stdout umleiten, damit Du auch Fehlermeldungen aus dem gleichen stream empfangen kannst wie Deine print() Ausgabe.

https://www.howtogeek.com/435903/what-are-stdin-stdout-and-stderr-on-linux/

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Det20

Oh man, ja klar, hätte auch selbst drauf kommen können, danke für den Hinweis. Der Tag war einfach zu lang.


qx(sudo /home/pi/starlink/status.py 2>&1);