Seite 2 von 2

Re: shell() antwortet mit Fehler

Verfasst: So, 18.09.2022 19:30
von rammi22
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

Verfasst: So, 18.09.2022 19:41
von Karolus
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

Verfasst: So, 18.09.2022 20:02
von rammi22
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

Verfasst: So, 18.09.2022 20:28
von Karolus
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

Verfasst: So, 18.09.2022 22:19
von Hiker
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

Verfasst: Mo, 19.09.2022 10:34
von rammi22
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

Verfasst: Mo, 19.09.2022 11:13
von Karolus
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

Verfasst: Mo, 19.09.2022 11:36
von Karolus
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

Verfasst: Mo, 19.09.2022 14:25
von rammi22
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