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 (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 (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?
gzip gibt das Ergebnis nach "stderr" aus.
Versuch mal$ret = qx(gzip -v $file 2>&1 )
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
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 ;)