FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Det20 am 02 März 2022, 20:20:09

Titel: [Erledigt] QX Aufruf mit Ausgabe
Beitrag von: Det20 am 02 März 2022, 20:20:09
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)
Titel: Antw:QX Aufruf mit Ausgabe
Beitrag von: betateilchen am 02 März 2022, 20:40:51
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/

Titel: Antw:QX Aufruf mit Ausgabe
Beitrag von: Det20 am 02 März 2022, 22:07:22
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);