![]() |
Aus Konsolenanwendung Programm starten und Ergebnis auslesen
Hallo,
ich möchte mit meiner Konsolenanwendung eine andere Konsolenanwendung starten und dann das Ergebnis einlesen. Bei der Delphi-Hilfe habe ich mir abgeguckt wie ich in der Konsole einen einfachen Text eingebe und den dann auslese:
Delphi-Quellcode:
Niko hat mir in einem anderen
procedure Test;
var AString: string; begin Write('Enter a line of text: '); ReadLn(AString); WriteLn('You typed: ', AString); WriteLn('Hit <Enter> to exit'); ReadLn; end; ![]() Jetzt soll mein Konsolenprogramm aber selbst einen anderen Prozess starten und anschließend dessen Ergebnis auslesen. Ich habe versucht das mit ShellExecuteEx hinzubekommen, leider mit wenig Erfolg. Zum Hintergrund: Ich verwende Subversion und möchte mit meiner Konsolenanwendung Subversion nach einer Eigenschaft meiner Head-Revision fragen. Wenn ich das in der Kommandozeile eingebe sieht der Befehl wie folgt aus:
Delphi-Quellcode:
Als Antwort bekomme ich eine neue Zeile in der Konsole mit dem Wert der angeforderten Eigenschaft und genau diese möchte ich gern einlesen und weiterverarbeiten.
svn propget svn:log c:\projekte\test\repositorytest --revprop -r 6
Mein bisheriger Code sieht so aus:
Delphi-Quellcode:
Funktioniert aber leider nicht.
procedure TestRun;
var ALine: string; begin if RunExecutableAndWait('svn', 'propget svn:log c:\projekte\test\repositorytest --revprop -r 6') then ReadLn(ALine) else ALine := SysErrorMessage(GetLastError); WriteLn('Result: ', ALine); WriteLn('Hit <Enter> to exit'); ReadLn; end; function RunExecutableAndWait(AExecutable, AParams: string): boolean; var AProcessHandle : dword; AShellExecInfo : TShellExecuteInfo; begin Result := false; FillChar(AShellExecInfo, SizeOf(AShellExecInfo), 0); with AShellExecInfo do begin cbSize := SizeOf(AShellExecInfo); fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; lpVerb := 'open'; lpFile := PChar(AExecutable); lpParameters := PChar(AParams); end; if ShellExecuteEx(@AShellExecInfo) then AProcessHandle := AShellExecInfo.HProcess else Exit; while WaitForSingleObject(AProcessHandle, 50) <> WAIT_OBJECT_0 do Sleep(100); CloseHandle(AProcessHandle); Result := true; end; Schon mal vielen Dank im Voraus! |
Re: Aus Konsolenanwendung Programm starten und Ergebnis ausl
Suche mal nach
![]() ![]() Mit CreatePipe kann die Konsolenausgabe umgeleitet werden. |
Re: Aus Konsolenanwendung Programm starten und Ergebnis ausl
Und um den Umgang mit Pipes angenehm zu gestalten gibts
![]() |
Re: Aus Konsolenanwendung Programm starten und Ergebnis ausl
Von mir ganz gerne genommen:
TJvCreateProcess aus der Jedi Lib Auch könnt ich mir vorstellen, das du nicht den Umweg über eine Konsole gehen musst, falls svn ein API zur verfügung stellt. Ich kenne svn zwr nicht, aber andere Versionsverwaltungssystem die ich kenne haben eine API mfg DerDan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz