Console Eingabe

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Console Eingabe

Beitrag 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?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Console Eingabe

Beitrag 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...?
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Console Eingabe

Beitrag 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.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Console Eingabe

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Console Eingabe

Beitrag 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).
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Console Eingabe

Beitrag 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$)
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Console Eingabe

Beitrag 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
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Console Eingabe

Beitrag 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)

Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Console Eingabe

Beitrag 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() 
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten