Aktuelle Zeit: 06.06.2020 19:42

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Python Script in Terminal starten und Terminal offen lassen
BeitragVerfasst: 07.01.2020 11:38 
Offline
Benutzeravatar

Registriert: 08.10.2006 18:04
Wohnort: Wien
Hallo meine Freunde !
Ich tüftle wieder mal seit Tagen an einem Problem und komme nicht dahinter.
Ich möchte einen Python Script im Terminal starten was auch funktioniert aber
das Terminal schließt sich sofort wieder.
Es sollte offen bleiben mit der Meldung:
------------------
(program exited with code: 0)
Press return to continue

So wie es super funktioniert bei Geany oder anderen Editoren.
Ihr habt sicher die Lösung für mich ! Danke !

Code:
MyProg = RunProgram("x-terminal-emulator","-e python /home/user/MyPython/colorTerm.py", "/home/user/MyPython", #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$)

_________________
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 07.01.2020 12:45 
Offline
Benutzeravatar

Registriert: 23.12.2005 15:00
Wohnort: Alling (bei FFB)
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:
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:
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

_________________
Bild


Zuletzt geändert von Macros am 07.01.2020 17:54, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 07.01.2020 13:34 
Offline
Benutzeravatar

Registriert: 08.10.2006 18:04
Wohnort: Wien
Vielen lieben Dank für diese ausführliche Unterstützung !!!!
Ich werde das jetzt mal testen !
Vielen vielen Dank !!!!

_________________
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 07.01.2020 16:19 
Offline
Benutzeravatar

Registriert: 08.10.2006 18:04
Wohnort: Wien
Du bist ein Chef !!!!
Bitte wie kommt man zu so einer Befehlszeile ?
Code:
cmd$=~" -e bash -c \"python /home/user/MyPython/colorTerm.py ; read -n1 -r -p 'Press Return To Continue...'\" "

Ich hab seit gestern stundenlang im Netz nach einer Lösung gesucht und unzählige Befehle getestet, keiner hat funktioniert.
Hut ab und vielen Dank !!!!

_________________
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 07.01.2020 17:10 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Da 'read' ein nativer Bash-Befehl ist, gibt man im Terminal dafür einfach 'help read' ein. Für alles andere gibt es man.

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

Das ist nicht ganz richtig. Wenn man das Executable-Format in den "Compiler-Optionen" auf "Console" stellt und 'OpenConsole()' nutzt, dann geht auch ein Fenster auf, ohne dass man sich zunächst ein Werkzeug basteln muss.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 07.01.2020 17:50 
Offline
Benutzeravatar

Registriert: 23.12.2005 15:00
Wohnort: Alling (bei FFB)
Danke Nic, wieder was gelernt. Kommt mir sehr gelegen,
da ich selbst immer den obigen Umweg gewählt habe.
Ich passe gleich meinen ersten Beitrag an.

@legion:
Wie man zu solchen Zeilen kommt? Das lernt man mit der Zeit wenn man unter Linux experimentiert. Den Trick bash mit einer Befehlssequenz aufzurufen kann man unter Linux öfters brauchen.
Du kannst da auch noch beliebig weiterbauen. z.B.
Code:
cmd$=~"  -e bash -c \""+                                                          ; wir starten Bash mit einer Befehlssequenz als Parameter.
                                                                                  ; Das \" leitet die Befehle ein, in der Variable steht dann :  -e  bash -c "{Befehle die gleich folgen}"
     "python /usr/share/doc/python-docopt/examples/arguments_example.py ; "+      ; Wir rufen dein Python Programm auf
     ~"exitcode=$?; echo exit code was $exitcode;"+                               ; Der Exit Code wird in die bash-Variable exitcode gespeichert und dann zeigt echo die Meldung
     ~"read -n1 -r -p 'Press Return To Continue...';"+                            ; Wir warten auf das Return , -n 1=1 zeichen lesen, -r = erlaube keine Escapesequenzen, -p = Zeige folgende Meldung
     ~"\" "                                                                       ; Abschließende Anführungszeichen für bash

Befehle werden jeweils durch einen ; getrennt. Du kannst auch befehle mit anderen Zeichen voneinander abhängig machen:
Befehl 1 && Befehl 2
heißt in Bash: Führe Befehl 2 nur aus, wenn Befehl 1 einen Exitcode von 0 hatte, also erfolgreich war.
Mehr dazu hier.
Wie man Hilfe zu Befehlen findet hat NicTheQuick schon gesagt, die Befehle selbst, wie z.B. read findest du am besten mit Google und dem Stichwort bash.


Allerdings als Warnung: Bash ist alles andere als eine schöne Programmiersprache. Und langsam zudem. Allerdings auch sehr nützlich zu kennen,
da man sie auf nahezu jedem Linux verfügbar hat, und sei es das auf dem Raspberry Pi, deinem Smart TV von Samsung oder gar deiner Kaffemaschine ;)
Doch allgemein erledige lieber möglich viel in Purebasic und anderen richtigen Programmiersprachen.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 07.01.2020 22:37 
Offline
Benutzeravatar

Registriert: 08.10.2006 18:04
Wohnort: Wien
Danke für die tolle Schulung ! :mrgreen: :mrgreen: :mrgreen:
Ich dachte ich bin gut auf Linux und wollte schon die Ausbildung zum
Linux-Admin machen. Jetzt ist mir klar, ich hab keine Ahnung und sollte
lieber eine Tischler Lehre machen.

DANKE !!!

_________________
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 08.01.2020 11:11 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
In der Ausbildung würdest du die Dinge ja alle lernen. Also gib nicht verfrüht damit auf. :allright:

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 08.01.2020 19:02 
Offline
Benutzeravatar

Registriert: 08.10.2006 18:04
Wohnort: Wien
Danke für die Motivation !!!!
Ich bin schon 55 Jahre alt und werde nach 33 Dienstjahren bei Opel in Wien
meinen Job als Industrieelektroniker verlieren - PSA sei Dank.
Jetzt hab ich die Möglichkeit und kann mir eine neue Ausbildung aussuchen.
Sollte natürlich auch am Arbeitsmarkt gefragt sein denn mit 55 ist es nicht mehr leicht.

Vorschläge werden gerne angenommen, aber bitte nicht im Pflegebereich, was technisches
sollte es schon sein !

LG

_________________
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Python Script in Terminal starten und Terminal offen las
BeitragVerfasst: 08.01.2020 19:47 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Als Industrieelektroniker hast du eine gute Basis
dich als SPS Programmierer weiterbilden zu lassen.

Somit kommst du den dem Zertifikaten als Programmierer für SPS und Visualisierung
ohne eine neue Ausbildung anfangen zu müssen.

Ich arbeite in einer kleinen Firma schon über 24 Jahre als SPS Programmierer
und habe leider verpasst mir die Zertifikate bei Siemens zu machen...

Mit unseren alten Vertreter von Siemens hätte ich diese sofort bekommen.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye