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