Hauptmenü

qx liefert nichts zurück

Begonnen von petibub, 29 Oktober 2020, 17:58:17

Vorheriges Thema - Nächstes Thema

petibub

Hallo!

Ich habe ein dummes Anfängerproblem: qx liefert bei mir nichts zurück.

Wenn ich in der FHEM Konsole { return qx(ls) } eingebe, bekomme ich nichts zurück. Oder auch { return `pwd` } liefert nichts. Es liegt also nicht an der Schreibweise...

Das Problem ist übrigens beim Aufruf von ping in 99_myUtils aufgetaucht:
my $ret = qx(ping -c 1 -q google.com);
if ($ret =~ /1 received/)

liefert Use of uninitialized value $ret in pattern match (m//) ...

Ich konnte es auf den fehlende Rückgabewert von qx rückverfolgen. Habt ihr vielleicht Idee woran das liegen könnte?

lg; Piotr

betateilchen

Bei mir funktioniert Dein Code völlig problemlos.

Sowohl das hier:


sub test {
my $ret = qx(ping -c 1 -q google.com);
if ($ret =~ /1 received/) { return "gefunden" };
}


als auch

{qx(ls)}

als auch

{return qx(ls)}

in der FHEM Befehlszeile liefern bei mir die erwarteten Ergebnisse.

Stehen denn irgendwelche Hinweis im Logfile, warum es nicht funktionieren könnte?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

petibub

Danke fürs nachschauen!

Ich habe

{ my $ret = qx(ping -c 1 -q google.com);; if ($ret =~ /1 received/) { return "gefunden" };; }

ausprobiert und mit verbose=5 habe ich in der log-Datei:

PERL WARNING: Use of uninitialized value $ret in pattern match (m//) at (eval 664536) line 1.

bekommen. Also tatsächlich liefert qx nichts. Ich habe inzwischen perl upgrade bemacht (buster auf R PI, perl auf 5.28) - brachte aber nichts.
Ist das vielleicht ein Rechteprobleme?

Christoph Morrison

{ my $ret = qx(ping -c 1 -q google.com);; if ($ret =~ /1 received/) { return "gefunden" };; }

liefert bei mir (wie erwartet) gefunden zurück.

Hast du ping überhaupt installiert?

betateilchen

Zitat von: Christoph Morrison am 29 Oktober 2020, 20:29:33
Hast du ping überhaupt installiert?

wenn das die Ursache wäre, gäbe es einen entsprechenden Fehlerhinweis im Log:

2020.10.29 20:47:54 1: PERL WARNING: Can't exec "ping2": No such file or directory at ./FHEM/99_myUtils.pm line 22.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Christoph Morrison

Zitat von: betateilchen am 29 Oktober 2020, 20:49:36
wenn das die Ursache wäre, gäbe es einen entsprechenden Fehlerhinweis im Log

Ich weiß, aber weißt du ob petibub uns überhaupt alle relevanten Logeinträge kopiert hat?

petibub

Zitat von: Christoph Morrison am 29 Oktober 2020, 20:29:33

Hast du ping überhaupt installiert?

Berechtigte Frage - Ja, habe ich. ping funktioniert problemlos in der Bash, ich habe auch andere Befehle ausprobiert  - in Wirklichkeit brauch ich sendEmail, das in Bash geht aber von FHEM aus nicht.

Habe noch stacktrace auf 1 und verbose auf 5 gestellt und dann

{ my $ret = qx(ping -c 1 -q google.com);; if ($ret =~ /1 received/) { return "gefunden" };; }

ausgeführt. Log:

2020.10.30 16:23:24 5: Cmd: >{ my $ret = qx(ping -c 1 -q google.com); if ($ret =~ /1 received/) { return "gefunden" }; }<
2020.10.30 16:23:24 1: PERL WARNING: Use of uninitialized value $ret in pattern match (m//) at (eval 700271) line 1.
2020.10.30 16:23:24 3: eval: { my $ret = qx(ping -c 1 -q google.com); if ($ret =~ /1 received/) { return "gefunden" }; }
2020.10.30 16:23:24 1: stacktrace:
2020.10.30 16:23:24 1:     main::__ANON__                      called by (eval 700271) (1)
2020.10.30 16:23:24 1:     (eval)                              called by fhem.pl (1135)
2020.10.30 16:23:24 1:     main::AnalyzePerlCommand            called by fhem.pl (1160)
2020.10.30 16:23:24 1:     main::AnalyzeCommand                called by fhem.pl (1089)
2020.10.30 16:23:24 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2678)
2020.10.30 16:23:24 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (951)
2020.10.30 16:23:24 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (578)
2020.10.30 16:23:24 1:     main::FW_Read                       called by fhem.pl (3753)
2020.10.30 16:23:24 1:     main::CallFn                        called by fhem.pl (748)


Hilft das irgendwie?

Ich habe übrigens Buster mit Touchscreen auf R Pi installiert. Hilft diese Info irgendwie?
lG; Piotr


petibub

Inzwischen weiß ich, dass es an meinem Perl oder System liegt. Denn in der Bash
perl -e "qx(ping -c 1 -q google.com);"
liefert nichts zurück.

Vielleicht habe ich irgendwie STDOUT umgebogen? Ich schaue mal was das mächtige Internet dazu sagt...  :-[

amenomade

#8
Zitat von: petibub am 30 Oktober 2020, 16:53:25
Inzwischen weiß ich, dass es an meinem Perl oder System liegt. Denn in der Bash
perl -e "qx(ping -c 1 -q google.com);"
liefert nichts zurück.
Das ist ganz normal.

Was liefert aber
perl -e "print qx(ping -c 1 -q google.com);"?

Ansonsten, was kommt in der Log wenn Du folgendes in Fhem eingibst?
{ print qx(date) }

Zusätzliche Tests in der Console:
perl -le'use Config; print $Config{sh}'
Dann:
file /xxx/xxxx wo /xxx/xxxx das Ergebnis vom vorherigen Perl-Kommando ist
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

petibub

Lieber amenomade, danke dass du mir hilfst!

Zitat von: amenomade am 30 Oktober 2020, 22:49:29
Das ist ganz normal.

ah, habe jetzt auch gemerkt. Falsche Fährte...

ZitatWas liefert aber
perl -e "print qx(ping -c 1 -q google.com);"?

Damit bekomme ich ein richtiges Ergebnis:
PING google.com (172.217.23.46) 56(84) bytes of data.

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.628/12.628/12.628/0.000 ms


Zitat
Ansonsten, was kommt in der Log wenn Du folgendes in Fhem eingibst?
{ print qx(date) }

Dann bekomme ich leider nur:
1

ZitatZusätzliche Tests in der Console:
perl -le'use Config; print $Config{sh}'

Da bekomme ich
/bin/sh

Und mit:
file /bin/sh
bekomme ich:
/bin/sh: symbolic link to dash
Kannst du damit etwas anfangen?
Danke!

amenomade

Ich habe vermutet, dass vielleicht etwas im dem Shell gedreht wurde, aber es scheint in Ordnung zu sein.

{ print qx(date) }liefert ja 1 zurück. Ich habe gefragt, was in der Log dabei kommt.

Jetzt wäre die Frage: was kommt in der Log bei
{print qx(ping -c 1 -q google.com)} in der Kommandozeile von Fhem
Das um sicher zu stellen, dass Du nicht zwei unterschiedliche Versionen von Perl hast (eine mit User pi in der Console, und eine andere, die Fhem benutzt), die unterschiedlich reagieren.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

betateilchen

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

Christoph Morrison

Zitat von: petibub am 31 Oktober 2020, 10:16:45
Dann bekomme ich leider nur:
1

Im Log oder im Webfrontend angezeigt? Im Log sollte halt das Datum stehen.

Zitat von: petibub am 31 Oktober 2020, 10:16:45
/bin/sh: symbolic link to dash
Kannst du damit etwas anfangen?

Abhängig vom OS ist das ok.

Was wird bei

{use Data::Dumper;; Dumper(%ENV);;}

angezeigt?

Christoph Morrison

Zitat von: betateilchen am 31 Oktober 2020, 10:31:09
ich geh mal Popcorn machen...

Ich hätte gerne welches mit Karashell.

amenomade

Zitat von: betateilchen am 31 Oktober 2020, 10:31:09
ich geh mal Popcorn machen...
Du kannst aber auch gerne weitere konstruktive Vorschläge machen, um das Problem zu begrenzen. Das mit mehreren Perl Installationen habe ich schon mehrmals hier gesehen, deswegen frage ich. Aber der TE freut sich bestimmt auf andere mögliche Erklärungen seines Problems.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus