Seite 1 von 1

Terminal vs. RunProgram()

Verfasst: 07.04.2020 13:18
von Nino
Hallo!

Ich möchte unter Linux mit PureBasic ein anderes Programm ausführen.
Das Problem: Obwohl der Programmaufruf im Terminal wie erwartet funktioniert, funktioniert er mit RunProgram() nicht.

Im Einzelnen (getestet unter Linux Mint 19.3 Cinnamon mit PB 5.70 x64):
Ich habe eine Datei "script.r" mit dem Inhalt
3 * 4
Ausführung dieser Befehlszeile

Code: Alles auswählen

Rscript script.r
im Terminal zeigt [1] 12.
Auch die Umleitung in eine Datei funktioniert.

Code: Alles auswählen

Rscript script.r > out.txt
schreibt [1] 12 in die Datei.

Wenn ich "Rscript" durch den kompletten Pfadnamen "/usr/bin/Rscript" ersetze, funktioniert alles genauso.

Im Gegensatz dazu mit PureBasic:

Code: Alles auswählen

; Linux Mint 19.3 Cinnamon

SetCurrentDirectory("/home/nino/Schreibtisch/")
Debug GetCurrentDirectory()

; Debug RunProgram("Rscript", "./script.r > r_out.txt", "")         ; -> 1
Debug RunProgram("/usr/bin/Rscript", "/home/nino/Schreibtisch/script.r > r_out.txt", "")  ; -> 1
RunProgram() liefert in beiden Fällen 1 zurück, aber sonst sehe ich nichts. Eine Datei namens "r_out.txt" wird nicht erzeugt.

Wie kann ich es mit PureBasic anstellen, dass Rscript ein Skript ausführt und das Ergebnis in eine Datei schreibt?

Re: Terminal vs. RunProgram()

Verfasst: 07.04.2020 16:51
von NicTheQuick

Code: Alles auswählen

Debug RunProgram("/usr/bin/Rscript", "/home/nino/Schreibtisch/script.r > r_out.txt", "")  ; -> 1
Das Schreiben in die Datei mittels ">"- Operator ist ein Befehl von Bash oder eben deiner normalen Shell. 'RunProgram()' kann tatsächlich nur Programme mit Parametern ausführen und Operatoren wie du sie aus Bash kennst, nicht interpretieren und ausführen. Umgehen könntest du das so:

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > r_out.txt\"", "")
Das verhält sich dann genau so wie wenn du es manuell im Terminal eingibst.

Re: Terminal vs. RunProgram()

Verfasst: 07.04.2020 19:59
von Nino
Hallo NicTheQuick,

vielen Dank für Deine Antwort!
NicTheQuick hat geschrieben:

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > r_out.txt\"", "")
... funktioniert leider auch nicht. Vielleich hat mein Linux-System irgendwo 'ne Macke, aber ich habe keine Ahnung wo ich anfangen soll zu suchen.

Re: Terminal vs. RunProgram()

Verfasst: 08.04.2020 10:10
von NicTheQuick
Was ist, wenn du die Ausgabedatei r_out.txt auch absolut angibst oder den WorkingDirectory-Parameter von RunProgram an den Schreibtisch anpasst?

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > r_out.txt\"", "/home/nino/Schreibtisch")

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > /home/nino/Schreibtisch/r_out.txt\"", "")

Re: Terminal vs. RunProgram()

Verfasst: 08.04.2020 12:30
von Nino
Das funktioniert :!:
Und meine Antwort von gestern war falsch, tatsächlich funktioniert der betr. Code auch. Ich hatte nur leider einen blöden Fehler gemacht. :oops:

Nochmal ganz herzlichen Dank für die Unterstützung! Ich hatte zuvor schon gefühlt "das halbe Internet" durchsucht, aber keine Lösung gefunden.