[gelöst] shell Kommando mit qx aufrufen - Ergebnis nicht immer in der Variabeln

Begonnen von RalfRog, 06 Juni 2022, 15:19:37

Vorheriges Thema - Nächstes Thema

RalfRog

Hallo
Ich stell die Frage mal in den Anfängerfragen - es ist ein Thema zum Aufrufen von Shell Kommandos per qx in der "99_myUtils.pm"

Habe Ottos Blog gelesen https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html
sowie auch z.B. hier        https://forum.fhem.de/index.php/topic,115715.msg1099800.html#msg1099800  etc.

Nutze qx() schon länger und prinzipiell funtioniert es bei mir $ret = qx(Kommando) ; Sowohl das Kommando wird ausgeführt als auch das Ergebnis in die Variable geschrieben, so dass ich $ret z.B. ins Log oder eine Telegram-Message schreiben kann.

Was z.B. klappt:

$ret = qx(ls -l '$file') ;
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a '$attach' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=yes -o message-charset=utf-8 );


Was nicht funktioniert ist z.B.:

$ret = qx(gzip -v $file) ;  < oder $ret = qx(gzip -v '$file') >

es wird nichts in $ret geschrieben. Stattdessen wir das Ergebnis direkt ins logfilegeschrieben. ...hmmmm
Was ist der Unterschied zwischen ls und gzip?

FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

DetlefR

gzip gibt das Ergebnis nach "stderr" aus.
Versuch mal$ret = qx(gzip -v $file 2>&1 )

RalfRog

Oh Mann.....
Da hätte ich noch hundert Jahre an allem möglichen gezweifelt  :P

Funktioniert, danke!

P.S.
gzip ohne Parameter liefert ja keine Ausgabe, aber mit -v gibt es dann:
fhem_history_prev-week_2022-23_1.csv:   87.7% -- replaced with fhem_history_prev-week_2022-23_1.csv.gz
da gehe ich von stdout aus bzw. denk gar nicht drüber nach.

... vielleicht ein Problem bei Allem was von stdin liest und nach stdout ausgibt - daher geht verbose sinnvollerweise nach stderr
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

DetlefR

Zitat... vielleicht ein Problem bei Allem was von stdin liest und nach stdout ausgibt - daher geht verbose sinnvollerweise nach stderr

Leider gibt es bei den Smileys keinen Daumen ;)