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)
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/
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);