anoniem Geplaatst: 15 mei 2003 Delen Geplaatst: 15 mei 2003 Ik heb een c++ programma geschreven en ik wil de output van een andere programma in kunnen lezen op de commandline, bijv.: 'cdrecord -optie' geeft als output: 1234,5678 vervolgens wil ik deze output in kunnen lezen, zoals je dat ook kunt doen onder de commandline alleen dan dus met c++: 'kutcd 1234,5678' waarbij '1234,5678' dus de output is van cdrecord. Hoe doe je dit? Ik heb me rot gezocht op google en het niet kunnen vinden. Het komt er op neer dat de output van het ene programma naar het andere programma gepiped wordt. Quote Link naar reactie
anoniem Geplaatst: 16 mei 2003 Auteur Delen Geplaatst: 16 mei 2003 Ik snap je vraag niet. Zoals je zelf zegt kan dat op de command-line. Dus lijkt me dat je probleem is opgelost :) Het maakt voor de command-line echt niet uit of de applicatie is geschreven als een script, in pascal of wat dan ook. Quote Link naar reactie
anoniem Geplaatst: 16 mei 2003 Auteur Delen Geplaatst: 16 mei 2003 Ik gebruik de opdracht 'system()' om een extern commando vanuit c++ op de commandline uit te voeren: system("clear"); Maar soms heeft dat commando een output die ik nodig heb in het c++ programma vanuit welke die wordt aangeroepen: system("cdrecord -multisessioninfo"); voert cdrecord uit en geeft een string op het scherm. Ik wil die string vervolgens in een variabele inlezen en ik weet niet hoe dat moet. Ik heb namelijk een frontend geschreven voor cdrecord en ik heb de output van cdrecord -nogwattus nodig binnen dat frontend. Vandaar. Quote Link naar reactie
anoniem Geplaatst: 16 mei 2003 Auteur Delen Geplaatst: 16 mei 2003 [quote:1a8cb498d0="computerbacterie"]Ik heb een c++ programma geschreven en ik wil de output van een andere programma in kunnen lezen op de commandline, bijv.: 'cdrecord -optie' geeft als output: 1234,5678 vervolgens wil ik deze output in kunnen lezen, zoals je dat ook kunt doen onder de commandline alleen dan dus met c++: 'kutcd 1234,5678' waarbij '1234,5678' dus de output is van cdrecord. Hoe doe je dit? Ik heb me rot gezocht op google en het niet kunnen vinden. Het komt er op neer dat de output van het ene programma naar het andere programma gepiped wordt.[/quote:1a8cb498d0] [url=http://forum.computertotaal.nl/phpBB2/viewtopic.php?p=422808#422808]Op basis van deze posting... 8)[/url] Deze werkt zonder tussenbestand... [code:1:1a8cb498d0] function GetOutput(const CommandLine:string): string; var SecurityAttributes: TSecurityAttributes; StartupInformation: TStartupInfo; ProcessInformation: TProcessInformation; StdOutPipeRead, StdOutPipeWrite: THandle; WasOK: Boolean; Buffer: array[0..255] of Char; BytesRead: Cardinal; Line: String; begin Application.ProcessMessages; SecurityAttributes.nLength := SizeOf(SecurityAttributes); SecurityAttributes.bInheritHandle := True; SecurityAttributes.lpSecurityDescriptor := Nil; CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SecurityAttributes, 0 ); try ZeroMemory(@StartupInformation, SizeOf(StartupInformation)); StartupInfo.cb := SizeOf(StartupInformation); StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; StartupInfo.wShowWindow := SW_HIDE; StartupInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); StartupInfo.hStdOutput := StdOutPipeWrite; StartupInfo.hStdError := StdOutPipeWrite; WasOK := CreateProcess(Nil, PChar(CommandLine), Nil, Nil, True, 0, Nil, Nil, StartupInformation, ProcessInformation); CloseHandle(StdOutPipeWrite); if not WasOK then raise Exception.Create('Could not execute command line!') else try Line := ''; repeat WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); if BytesRead > 0 then begin Buffer[BytesRead] := #0; Line := Line + Buffer; end; until not WasOK or (BytesRead = 0); WaitForSingleObject(ProcessInformation.hProcess, INFINITE); finally CloseHandle(ProcessInformation.hThread); CloseHandle(ProcessInformation.hProcess); end; finally result:=Line; CloseHandle(StdOutPipeRead); end; end; mijnVariabele := GetOutput('cdrecord -optie'); [/code:1:1a8cb498d0] Zelf ff (recht-toe-recht-aan) vertalen. Quote Link naar reactie
anoniem Geplaatst: 16 mei 2003 Auteur Delen Geplaatst: 16 mei 2003 Daar begrijp ik helemaal niets van. Als het zo moeilijk is dan hou ik het wel bij een tussenbestand. Dat is veel simpeler en ziet er zo uit: ... ifstream msinfotmp; msinfotmp.open("msinfo.tmp"); msinfotmp >> multisessionstring; if(multisessionstring=="") { multisessionstring="Unknown"; } msinfotmp.close(); system("rm msinfo.tmp"); ... Dat begrijp ik allemaal wel maar dat bovenstaande begrijp ik niet. Ik ben geen professioneel programmeur of zo, maar ik heb gewoon een tekstueel frontendje in elkaar geknutseld met ncurses onder linux voor cdrecord, omdat alle frontends die op internet te vinden zijn het niet doen bij mij. Quote Link naar reactie
anoniem Geplaatst: 16 mei 2003 Auteur Delen Geplaatst: 16 mei 2003 [quote:c8f1c20deb="computerbacterie"][color=red:c8f1c20deb][b:c8f1c20deb]Daar begrijp ik helemaal niets van[/b:c8f1c20deb][/color:c8f1c20deb]. ... Dat begrijp ik allemaal wel maar [color=red:c8f1c20deb][b:c8f1c20deb]dat bovenstaande begrijp ik niet[/b:c8f1c20deb][/color:c8f1c20deb]. Ik ben geen professioneel programmeur of zo, maar ik heb gewoon een tekstueel frontendje in elkaar geknutseld met [color=red:c8f1c20deb][b:c8f1c20deb]ncurses onder linux[/b:c8f1c20deb][/color:c8f1c20deb] voor cdrecord, omdat alle frontends die op internet te vinden zijn het niet doen bij mij.[/quote:c8f1c20deb] Hmm, dat was specifieke Win32 code. Blijkbaar ben je onder Linux ofzo bezig? Quote Link naar reactie
anoniem Geplaatst: 16 mei 2003 Auteur Delen Geplaatst: 16 mei 2003 [quote:45bb9c8ba2="h4xX0r"] Hmm, dat was specifieke Win32 code. Blijkbaar ben je onder Linux ofzo bezig?[/quote:45bb9c8ba2] Ik programmeer onder linux, inderdaad, en dan maak ik af en toe een commandline-programma. Van het programmeren van een grafische interface heb ik voor de rest geen verstand want ik gebruik de commandline, en dan de ncurses-bibliotheek voor de interface. Overigens gebruik ik ook geen IDE, maar ik programmeer alles vanuit een gewone teksteditor, en dan haal ik de compiler er over heen (g++ in dit geval). Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen