Seite 1 von 1

Console Eingabe

Verfasst: 22.09.2022 09:38
von ProgOldie
Ich möchte gern eine geöffnete Console so benutzen als wäre es eine Windowsconsole mit der Möglichkeit zur Eingabe wie cd.. etc.

Code: Alles auswählen

EnableExplicit
Define commandLine.s,aktDir.s
OpenConsole()                                
    ConsoleTitle ("PureBasic - Console Example:") 
    ConsoleLocate (18,2)                          
    aktDir = GetCurrentDirectory()
    Print (aktDir)        
    Repeat
    commandLine=Input()  
    PrintN (commandLine)
  
Until UCase(commandLine)="QUIT"    
    
    CloseConsole()
End
Obwohl ich im Compiler die entsprechende Consolen-Option eingestellt habe werden die Eingaben aber nicht interpretiert.
Wie erreicht man das?

Re: Console Eingabe

Verfasst: 22.09.2022 12:21
von jacdelad
Was genau meinst du mit "interpretiert"? Sollen die Eingaben 1:1 wie in der Konsole abgearbeitet werden? Dann solltest du dir mal "RunProgram" anschauen. Bei den Befehlen wie CD und dir musst du natürlich selbst Hand anlegen oder per RunProgram und Pipe die Ausgabe umleiten bzw. abgreifen.

Ich frage mich aber gerade, wozu...?

Re: Console Eingabe

Verfasst: 22.09.2022 17:07
von ProgOldie
Das nützt leider nichts. Da passiert nichts.

Code: Alles auswählen

EnableExplicit
Define commandLine.s,aktDir.s
OpenConsole()                                
    ConsoleTitle ("PureBasic - Console Example:") 
    ConsoleLocate (18,2)                          
    aktDir = GetCurrentDirectory()

    Print (aktDir)        
    Repeat
      commandLine=Input()
      RunProgram(commandLine)
  
Until UCase(commandLine)="QUIT"    
    
    CloseConsole()
End
@ jacdelad : Es gibt einige Programme, die nur über Console gesteuert werden. Wenn ich z.B. meine Python-Version haben will,
geht dies mit py --version
Um so etwas zu vereinfachen, will ich das mit Buttons vereinfachen.

Re: Console Eingabe

Verfasst: 22.09.2022 17:10
von ccode_new
Hallo,
du kannst andere Programme mit "RunProgram" aufrufen.

Du musst den aufgerufenen Programmen aber auch die notwendigen Parameter mitgeben und bei Leerstellen im Text müssen Anführungszeichen um den Befehl gesetzt werden.

Re: Console Eingabe

Verfasst: 22.09.2022 17:17
von jacdelad
Hm, ok, aber dazu muss dein Programm ja kein Konsolenprogramm sein, bzw. darf es nicht, wenn du Buttons usw. verwenden willst. RunProgram ist, wie hier schon mehrfach angesperochen, der richtige Befehl. In der Hilfe ist auch ein Beispiel, wie man mit dem aufgerufenen Programm kommunizieren kann, so kannst du die Ausgabe von Python abfangen (auch ganz ohne sichtbares Fenster).

Re: Console Eingabe

Verfasst: 22.09.2022 17:45
von ProgOldie
An dem Beispiel aus der Hilfe verstehe ich nicht, wie man da z.B. das Gewünschte py --version einbauen kann.
Dazu bitte noch eine Hilfe, damit ich verstehe, wie und wo da z.B. py --version eingebaut werden kann.

Code: Alles auswählen

Compiler = RunProgram(#PB_Compiler_Home+"compilers/pbcompiler", "-h", "", #PB_Program_Open | #PB_Program_Read)
  Output$ = ""
  If Compiler
    While ProgramRunning(Compiler)
      If AvailableProgramOutput(Compiler)
        Output$ + ReadProgramString(Compiler) + Chr(13)
      EndIf
    Wend
    Output$ + Chr(13) + Chr(13)
    Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
    
    CloseProgram(Compiler) ; Schließt die Verbindung zum Programm
  EndIf
  
  MessageRequester("Output", Output$)

Re: Console Eingabe

Verfasst: 22.09.2022 18:21
von jacdelad
Funktioniert bei mir wunderbar, musst natürlich auf den Pfad von Python umleiten (erste Zeile):

Code: Alles auswählen

Compiler = RunProgram("C:\Windows\py.exe", "--version", "C:\Windows", #PB_Program_Open | #PB_Program_Read)
Output$ = ""
If Compiler
  While ProgramRunning(Compiler)
    If AvailableProgramOutput(Compiler)
      Output$ + ReadProgramString(Compiler) + Chr(13)
    EndIf
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))
  
  CloseProgram(Compiler) ; Schließt die Verbindung zum Programm
  MessageRequester("Output", Output$)
Else
  Debug "Fehler"
EndIf

Re: Console Eingabe

Verfasst: 22.09.2022 18:55
von ccode_new
Try this:
(Linux, MacOs)

Code: Alles auswählen

Define.s output
Define *pout
Define *pstr = UTF8("python -v 3>&1 1>&2 2>&3")
Define *modus = UTF8("r")
Define.i plen
Define buffer.s

*pout = @buffer

prog = popen_(*pstr, *modus)

While( prog <> #Null And feof_(prog) = #Null)
  getline_(@*pout, @plen, prog)
  output + PeekS(*pout, #PB_Any, #PB_UTF8)
  Debug output
Wend
pclose_(prog)

FreeMemory(*pstr):FreeMemory(*modus)


Re: Console Eingabe

Verfasst: 23.09.2022 08:12
von ProgOldie
Danke für die Hilfen. Ich habe damit auch einen Weg zur Angabe der Pfade gefunden:

Code: Alles auswählen

EnableExplicit
Define.s Env_Variables,EnvVar
Define P.i
OpenConsole()

Env_Variables=GetEnvironmentVariable("PATH")

Repeat
  P=FindString(Env_Variables,";",1)
  EnvVar=Left(Env_Variables,P-1)
  Env_Variables=RemoveString(Env_Variables,EnvVar+";",1)
  PrintN(EnvVar)
Until Env_Variables=""

  PrintN("Druecken Sie Enter zum Beenden.")
  Input()