kleines problem

Fragen und Bugreports zur PureBasic 4.0-Beta.
Ninja_
Beiträge: 43
Registriert: 26.11.2005 18:43

kleines problem

Beitrag von Ninja_ »

Code: Alles auswählen

console = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
     While AvailableProgramOutput(console)
        Debug ReadProgramString(console)
     Wend
  Debug "running"
  Delay(500)
ForEver
wieso wird das programm nach kurzer ausgabe angehalten bis die cmd.exe von hand beendet wurde und läuft erst dann wieder weiter? Und wie vermeide ich das?

mfg Ninja
Ninja_
Beiträge: 43
Registriert: 26.11.2005 18:43

Beitrag von Ninja_ »

Kann mir niemand helfen?
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Schau mal bei While-Wend nach... :wink:
In deinem Programm sind 2 Schleifen, einmal Repeat-ForEver und dann noch While-Wend. Diese 2. Schleife, While-Wend, ist es, in der das Programm so lange bleibt, bis es aus dem Konsolenfenster nix mehr lesen kann (sprich bis das Konsolenfenster vom Benutzer manuell geschlossen wurde).... :wink:
Ninja_
Beiträge: 43
Registriert: 26.11.2005 18:43

Beitrag von Ninja_ »

ich habs jetz so modifieziert:

Code: Alles auswählen

console = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
     If AvailableProgramOutput(console)
        Debug ReadProgramString(console)
     EndIf
  Debug "running"
  Delay(500)
ForEver 
Also ohne wend / while schleife und trozdem hängts.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

ohne #PB_Program_Write funktionierts auch wenn die Console gleich geschlossen wird.
Kann es damit zusammenhängen das die Console auf "input" wartet ?
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Code: Alles auswählen

console.l = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
  length.l = AvailableProgramOutput(console)
  If length.l
    Debug Str(length.l)+"characters of program output left..."
    Debug ReadProgramString(console)
  EndIf
  Debug "running"
  Delay(500)
ForEver
Dass das Teil am Ende bei 73 Zeichen hängenbleibt (die ich übrigens weder mit ReadProgramError() noch mit ReadProgramData() auslesen konnte), macht mich schon stutzig... Da weiss ich auch nicht weiter... :?
Zuletzt geändert von hardfalcon am 06.03.2006 17:56, insgesamt 1-mal geändert.
Ninja_
Beiträge: 43
Registriert: 26.11.2005 18:43

Beitrag von Ninja_ »

ich habe aber vor später was in die konsole zu schreibe deshalb das write!
ich habe mittlerweile eine lösung gefunden indem ich einen thread erstelle der immer schaut ob was zum auslesen da is, und wenn nicht hängt eben blos der thread, leider ist das auf diese weise aber nicht in meinem projekt umzusetzen! Es muss doch irgendeine lösung geben :(
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

hardfalcon hat geschrieben:

Code: Alles auswählen

console.l = RunProgram("cmd","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write)
Repeat
  length.l = AvailableProgramOutput(console)
  If length.l
    Debug Str(length.l)+"characters of program output left..."
    Debug ReadProgramString(console)
  EndIf
  Debug "running"
  Delay(500)
ForEver
Dass das Teil am Ende bei 73 Zeichen hängenbleibt (die ich übrigens weder mit ReadProgramError() noch mit ReadProgramData() auslesen konnte), macht mich schon stutzig... Da weiss ich auch nicht weiter... :?
sehr merkwürdig
Debugger hat geschrieben: running
127characters of program output left...
Microsoft Windows XP [Version 5.1.2600]
running
86characters of program output left...
(C) Copyright 1985-2001 Microsoft Corp.
running
45characters of program output left...

running
43characters of program output left...
und dann ist bei mir schluss...
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ich glaub, ich hab die Ursache des Problems (aber leider keine Lösung dazu):
cmd.exe ist ja die Kommandozeile von Windows. Jetzt haben wir das Problem, dass cmd sowohl gestartet werden kann als auch selbst ein weiteres Programm starten kann. Starte "cmd.exe", und gib mal "cmd" ein.
Schau oben in die Titelleiste vom Konsolenfenster. Tipp nochmal "cmd" ein. Schau dir die Titelzeile nochmal an. Das ist wie ein Stapel Blätter: sobald du im letzten "Blatt" "cmd" eingegeben hast, kommt ein neues Blatt obendraufgefallen. Das ganze ist ein Fass ohne Boden... Mit irgendeinem anderen, normalen Programm sollte es gehen... Nur mit "cmd.exe" gehts halt nicht, das is ein Sonderfall...
Ninja_
Beiträge: 43
Registriert: 26.11.2005 18:43

Beitrag von Ninja_ »

Toll ich brauch aber genau die cmd.exe ;) ich hab schon programme gesehen die die cmd.exe getunnelt haben!
Gesperrt