shell() antwortet mit Fehler

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: shell() antwortet mit Fehler

Re: shell() antwortet mit Fehler

von rammi22 » Mo, 19.09.2022 14:25

Karolus hat geschrieben: Mo, 19.09.2022 11:36 Mglw. läuft bei dir bereits ein soffice-process im Hintergrund (aka Schnellstarter?) der okkupiert dann den neu gestarteten...
Ja, das war das Problem

Re: shell() antwortet mit Fehler

von Karolus » Mo, 19.09.2022 11:36

Mglw. läuft bei dir bereits ein soffice-process im Hintergrund (aka Schnellstarter?) der okkupiert dann den neu gestarteten und letzterer kehrt zur Befehlszeile zurück?
das kannst du nachprüfen indem du alle Dokumente schliesst, und im Terminal den Befehl:

Code: Alles auswählen

$ top | grep soffice
absetzt, und ggf. eine Weile wartest…

oder einfach mal:

Code: Alles auswählen

$ killall soffice

Re: shell() antwortet mit Fehler

von Karolus » Mo, 19.09.2022 11:13

Ich hab keine Ahnung was DU da anstellst, bei mir schliesst sich das Terminal NICHT (von selbst) nach absetzen des Befehls

Code: Alles auswählen

…$ soffice --calc 

Re: shell() antwortet mit Fehler

von rammi22 » Mo, 19.09.2022 10:34

Karolus hat geschrieben: So, 18.09.2022 20:28 ...
Die Ausgabe erfolgt im Terminal-fenster aus dem du Libreoffice gestartet hast
Das funktioniert (bei mir) nicht:
  • neues Dokument wird geöffnet
  • Terminal beendet Command:

    Code: Alles auswählen

    rammi@rammi-laptop-i7:~$ soffice --calc
    rammi@rammi-laptop-i7:~$ 
    
  • Schaltfläche im neuen Dokument eingefügt und mit Makro verbunden und ausgeführt (Klick)
Ergebnis: es wird nix im Terminal angezeigt, scheint mir ja auch unmöglich, weil das Terminal mit dem Starten eines neuen Dokument, das Kommando beendet und den Focus auf das Dokument dadurch verloren hat?!

Re: shell() antwortet mit Fehler

von Hiker » So, 18.09.2022 22:19

rammi22 hat geschrieben: So, 18.09.2022 19:30 ...
Das war der entscheidene Tipp...zwar stimmt der Pfad zum Skript, aber der Pfad zur erzeugten Datei muß auch absolut zum erwarteten Verzeichnis sein :-)
...
Nicht unbedingt. Man muss nur berücksichtigen, dass es um das aktuelle Verzeichnis des Prozesses geht, was entweder das Verzeichnis sein kann aus dem das Programm gestartet wurde, oder von einer .desktop Datei gesetzt wird oder oder oder...- also nicht ist, worauf man sich verlassen kann.

Also könntest Du auch Dein Skript mit einem cd-Befehl beginnen oder auch das zu verwendende Verzeichnis als Parameter übergeben. (Oder im Skript herausfinden mit welchem Pfad es aufgerufen wurde.)

Nachdem der Anfang erstmal funktioniert, hast Du alle Möglichkeiten...

Re: shell() antwortet mit Fehler

von Karolus » So, 18.09.2022 20:28

es funktioniert übrigens auch ohne Umleitung in eine Datei, das entscheidende dabei ist das du vorher Libreoffice aus einem Terminal startest:

Code: Alles auswählen

soffice --calc
die Basic-prozedur:

Code: Alles auswählen

Sub test_hello
 script = "/home/rammi/test.sh"
 Shell("/usr/bin/sh","-e" ,script )
    
End Sub
der Inhalt von "test.sh"

Code: Alles auswählen

#!/usr/bin/sh
echo "hello World"
Die Ausgabe erfolgt im Terminal-fenster aus dem du Libreoffice gestartet hast

Re: shell() antwortet mit Fehler

von rammi22 » So, 18.09.2022 20:02

Karolus hat geschrieben: So, 18.09.2022 19:41 ein vergleichbares .sh-script mit absoluter pfad-angabe im Script tut bei mir mit dem bereits beschriebenen Vorgehen via →→Formular/Webseite öffnen
Es geht ja nun, siehe oben, vielen Dank

Re: shell() antwortet mit Fehler

von Karolus » So, 18.09.2022 19:41

rammi22 hat geschrieben: So, 18.09.2022 18:55
Karolus hat geschrieben: So, 18.09.2022 18:45 ...in 95% brauchst du zunächst mal das …php dingens nicht...
Na ja, ich bin PHP-Entwickler und das auszuführende Skript löst eine umfangreiche PHP-Applikation aus. Da fehlt Wissen und Zeit, alles in ein Python-Skript zu bauen.
wie bereits gesagt für diese 5% gibts in python subprocess…
rammi22 hat geschrieben: So, 18.09.2022 18:55 Abgesehen davon denke ich, ist es total egal ob php oder sonst irgendwas. So ein Aufruf über eine UI wie OO sollte immer funktionieren.
"sollte funktionieren" …berühmte letzte Worte (Softwareentwickler)
rammi22 hat geschrieben: So, 18.09.2022 18:55 Ich denke, eventuell sind es die Pfade zu den Skripten, bei vielen Beiträge zum Thema shell() wird ja ein Windows-Nutzer vorrausgesetzt...
Du schliesst aus der Tatsache das es mehr Windows-benutzer als Linux-leute gibt, das es an den Pfadangaben liegt :roll:
rammi22 hat geschrieben: So, 18.09.2022 18:55 Ich habe das .php-Skript mit einem .sh Skript ausgetauscht, auch hier wird über das Terminal eine test.txt geschrieben aber über die Makro-Steuerung passiert nix

Code: Alles auswählen

Sub CallScanReader
 sh_script = "/home/rammi/Schreibtisch/Scanner/index.sh" 
 sh = "/usr/bin/sh"
 Shell(sh, "", sh_script, true)
End Sub
Das .sh Skript

Code: Alles auswählen

#!/bin/sh
# This is a comment!
echo Hello World ahb > ./test_sh.txt      # This is a comment, too!
ein vergleichbares .sh-script mit absoluter pfad-angabe im Script tut bei mir mit dem bereits beschriebenen Vorgehen via →→Formular/Webseite öffnen

Re: shell() antwortet mit Fehler

von rammi22 » So, 18.09.2022 19:30

Hiker hat geschrieben: So, 18.09.2022 19:18 Frage: was ist das Verzeichnis . also das aktuelle Verzeichnis ?
Das war der entscheidene Tipp...zwar stimmt der Pfad zum Skript, aber der Pfad zur erzeugten Datei muß auch absolut zum erwarteten Verzeichnis sein :-)
Also:

Code: Alles auswählen

<?php
//var_dump('test');
//echo 'done';

$file = "/home/rammi/Schreibtisch/Scanner/test_php.txt";
file_put_contents($file, 'test');

print_r('done');
Das Makro

Code: Alles auswählen

Sub CallScanReader
 php_script = "/home/rammi/Schreibtisch/Scanner/index.php"
 php = "/usr/bin/php"
 
  Dim starten as object
  starten = createUnoService("com.sun.star.system.SystemShellExecute")
  starten.execute(php, php_script, 0)
End Sub

Re: shell() antwortet mit Fehler

von Hiker » So, 18.09.2022 19:18

Frage: was ist das Verzeichnis . also das aktuelle Verzeichnis ?

Ich würde versuchen einen absoluten Pfad zu setzen,
oder mal ein Programm wie Okular/evince im skript aufzurufen, was man nicht übersieht. Ausserdem könnte man LibreOffice vom Terminal aufrufen, dann siehst Du auch eine Ausgabe des sh- Skripts.

Re: shell() antwortet mit Fehler

von rammi22 » So, 18.09.2022 18:55

Karolus hat geschrieben: So, 18.09.2022 18:45 ...in 95% brauchst du zunächst mal das …php dingens nicht...
Na ja, ich bin PHP-Entwickler und das auszuführende Skript löst eine umfangreiche PHP-Applikation aus. Da fehlt Wissen und Zeit, alles in ein Python-Skript zu bauen.

Abgesehen davon denke ich, ist es total egal ob php oder sonst irgendwas. So ein Aufruf über eine UI wie OO sollte immer funktionieren.
Ich denke, eventuell sind es die Pfade zu den Skripten, bei vielen Beiträge zum Thema shell() wird ja ein Windows-Nutzer vorrausgesetzt...

Ich habe das .php-Skript mit einem .sh Skript ausgetauscht, auch hier wird über das Terminal eine test.txt geschrieben aber über die Makro-Steuerung passiert nix

Code: Alles auswählen

Sub CallScanReader
 sh_script = "/home/rammi/Schreibtisch/Scanner/index.sh" 
 sh = "/usr/bin/sh"
 Shell(sh, "", sh_script, true)
End Sub
Das .sh Skript

Code: Alles auswählen

#!/bin/sh
# This is a comment!
echo Hello World ahb > ./test_sh.txt      # This is a comment, too!

Re: shell() antwortet mit Fehler

von Karolus » So, 18.09.2022 18:45

Hallo

An der Stelle kann ich jetzt nur empfehlen, vergiss BASIC und arbeite gleich mit Python, in 95% brauchst du zunächst mal das …php dingens nicht (für die restlichen 5% hat python ein subprocess-modul das auch vernünftig mit anderen prozessen komunizieren kann, und im übrigen für all das was du im weiteren noch so zu scripten gedenkst wohl die bessere Wahl)

Re: shell() antwortet mit Fehler

von rammi22 » So, 18.09.2022 18:39

Karolus hat geschrieben: So, 18.09.2022 18:08 Hallo

Mal "zurück auf Start" … du versuchst das alles ursprünglich via "klick auf Button" … Ja??
...
Ich dachte nicht, das dabei Komplikationen auftreten: Button click > Event löst Skript aus > Skript antwortet > Antwort wird ausgewertet :-(

Re: shell() antwortet mit Fehler

von rammi22 » So, 18.09.2022 18:33

Karolus hat geschrieben: So, 18.09.2022 18:08 ...
→Allgemein→Aktion : Dokument/Webseite öffnen und direkt unterhalb →→URL /home/rammi/Schreibtisch/PROJECTS/Scanner/Post/index.php
und hier gilt ebenfalls diese …index.php muss ausführbar sein, und z.B bei Doppeklick aufs Dateisymbol das gewünschte tun, (was immer das ist…?)
Damit öffnet sich die Datei im Editor, Rechte sind gesetzt zum ausführen

Code: Alles auswählen

ls -l index.php 
-rwxrwxrwx 1 rammi rammi 113 Sep 18 18:19 index.php

Re: shell() antwortet mit Fehler

von rammi22 » So, 18.09.2022 18:27

Toxitom hat geschrieben: So, 18.09.2022 18:13 hey Rammi,

tia, dann mach das halt so und teste Schritt für Schritt.

- Funktioniert das php-Skipt wie gewünscht bei manuellen Aufruf?
Ja, im Termianl ausgeführt klappt das (ich hab noch ein print_r mit "done" hinzugefügt), test.txt wird geschrieben

Code: Alles auswählen

$ /usr/bin/php index.php
done
Nächster Schritt:
Toxitom hat geschrieben: So, 18.09.2022 18:13 LO Makro -> Aufruf des Shellbefehls (vorher vielleicht die evt. vorhandenen Flagdatei im Temp-ordner löschen?) mit den Parametern
shell(php,"", script, true) ... der vierte Parameter steuert das Verhalten des Basic-Programms. Bei True wartet das Basic-Programm, bis der Shell-Aufruf fertig ist!
Dann prüfen ob die Tempdatei vorhanden ist und evt. den Inhalt auswerten.

Code: Alles auswählen

Sub CallScanReader
 script = "/home/rammi/Schreibtisch/Scanner/index.php" 
 php = "/usr/bin/php"
 Shell(php, "", script, true)
End Sub
Es wird keine test.txt geschrieben

Nach oben