Hallo legion,
x-terminal-emulator schließt sich sofort nachdem ein Befehl ausgeführt wurde, (mit --hold lässt sich das verhindern)
Also müssen wir dafür sorgen, dass der Befehl die Ausgabe enthält. Das geht mit dem Linux Befehl read.
Code: Alles auswählen
cmd$=~" -e bash -c \"python /usr/share/doc/python-docopt/examples/arguments_example.py ; read -n1 -r -p 'Press Return To Continue...'\" "
MyProg = RunProgram("x-terminal-emulator",cmd$, "", #PB_Program_Open | #PB_Program_Read)
Rueckgabe$ = ""
If MyProg
While ProgramRunning(MyProg)
If AvailableProgramOutput(MyProg)
Rueckgabe$ + ReadProgramString(MyProg) + Chr(13)
EndIf
Wend
Rueckgabe$ + "Exitcode: " + Str(ProgramExitCode(MyProg))
CloseProgram(MyProg)
EndIf
MessageRequester("Rueckgabe", Rueckgabe$)
Es wird eine Bash Shell ausgeführt, die zuerst dein Python Program aufruft und dann die Meldung anzeigt und auf die Taste wartet. Aber du willst ja auch den Exit Code,
und da wird es nun kompliziert, denn du bekommst den von x-terminal-emulator, und der wird stehts null sein außer dein Pythonprogram bringt ihn zum Abstürtzen
Was du willst ist wahrscheinlich gleich ein Konsolenprogramm schreiben.
Code: Alles auswählen
OpenConsole()
MyProg = RunProgram("/usr/bin/python","/home/user/MyPython/colorTerm.py", "/home/user/MyPython", #PB_Program_Open | #PB_Program_Read)
Rueckgabe$ = ""
If MyProg
While ProgramRunning(MyProg)
If AvailableProgramOutput(MyProg)
output$=ReadProgramString(MyProg)
; zeige die Ausgabe direkt an
PrintN(output$)
; Und hänge sie mit Zeilenumbruch an die Variabel Rückgabe
Rueckgabe$+output$+#CRLF$
EndIf
Delay(1) ; Damit dein Code die CPU nicht auslastet
Wend
PrintN("(program exited with code: "+Str(ProgramExitCode(MyProg))+")")
PrintN("Press return to continue")
Input()
CloseProgram(MyProg)
EndIf
Nicht wundern, unter Linux passiert (scheinbar) nichts, wenn du das startest.
Das liegt daran, das Purebasic unter Windows beim kompilieren eines Consolenprograms ein Konsolenfenster öffnet.
Unter Linux musst du das selbst.
Du kannst dir z.B. ein Werkzeug anlegen (Werkzeuge->Werkzeuge konfigurieren)
Als Kommandozeile gibst du
x-terminal-emulator
an, als Argumente
-e "%EXECUTABLE"
Als Name was du willst und als Auslöser z.B. "Nach dem erstellen des Executable" oder einfach ein Tastenkürzel.
Jetzt kannst du das Programm kompilieren und bequem aus der Purebasic IDE testen.
Du kannst es natürlich auch von Hand in der Konsole starten.
Edit: Das geht auch wesentlich einfacher indem man in den Compileroptionen das "Executable Format" auf "Console" umstellt. Danke NicTheQuick