PureBoard
http://forums.purebasic.com/german/

Terminal vs. RunProgram()
http://forums.purebasic.com/german/viewtopic.php?f=21&t=31944
Seite 1 von 1

Autor:  Nino [ 07.04.2020 13:18 ]
Betreff des Beitrags:  Terminal vs. RunProgram()

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
Zitat:
3 * 4
Ausführung dieser Befehlszeile
Code:
Rscript script.r
im Terminal zeigt [1] 12.
Auch die Umleitung in eine Datei funktioniert.
Code:
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:
; 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?

Autor:  NicTheQuick [ 07.04.2020 16:51 ]
Betreff des Beitrags:  Re: Terminal vs. RunProgram()

Code:
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:
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.

Autor:  Nino [ 07.04.2020 19:59 ]
Betreff des Beitrags:  Re: Terminal vs. RunProgram()

Hallo NicTheQuick,

vielen Dank für Deine Antwort!

NicTheQuick hat geschrieben:
Code:
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.

Autor:  NicTheQuick [ 08.04.2020 10:10 ]
Betreff des Beitrags:  Re: Terminal vs. RunProgram()

Was ist, wenn du die Ausgabedatei r_out.txt auch absolut angibst oder den WorkingDirectory-Parameter von RunProgram an den Schreibtisch anpasst?
Code:
RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > r_out.txt\"", "/home/nino/Schreibtisch")

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

Autor:  Nino [ 08.04.2020 12:30 ]
Betreff des Beitrags:  Re: Terminal vs. RunProgram()

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.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/