Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Fr 19.08.22 22:28 
Hallo,
ich arbeite gern mit Arduinos, da gibt es nützliche Hilfsprogramme zur Analyse, die aber nur Konsolenanwendungen sind, also über "Ausführen" gestartet werden müssen. Da mir das zu umständlich ist, habe ich in Delphi ein Programm gemacht, was mir die von mir genutzten Hilfsprogramme mit den von mir genutzten Options anzeigt. Auf ein Click auf einen Start-Button wird das Hilfsprogramm gestartet. Zur Kommunikation mit dem Hilfsprogramm habe mit CreatePipe eine Pipe eingerichtet. Das Ergebnis des Hilfsprogramms erhalte ich über die Pipe zurück und zeige es in einem TMemo an. Es geht wunderbar.

Mein Problem: Alle diese Hilfsprogramme kennen eine Option "-h" was als Hilfe die Bedeutung aller Options listet. Merkwürdig: Das geht nur bei einigen der Hilfsprogrammen. Über "Ausführen" geht es bei allen Hilfsprogrammen.

Ein Beispiel (Leerzeichen sind wichtig):
"avr-size -x -t D:\...\meinProgramm.elf" geht
"avr-size -h" geht nicht über Delphi, aber über "Ausführen.

Sinngemäß für ein anderes Hilfsprogramm ("avr-nm.exe") geht es auch über Delphi.

Ich habe schon an verschiedenen Stelle Sleeps eingebaut, um Zeitprobleme auszuschließen, ohne Erfolg.

Kann es sein, dass ein Konsolenprogramm Ausgaben macht, die nicht auch in die Pipe geschrieben werden? Oder hat jemand sonst eine Idee?

Grüße
GuaAck
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4791
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 20.08.22 08:26 
Was ich mir vorstellen könnte, wäre, daß anstatt auf STDOUT auf STDERR der Hilfetext ausgegeben wird (dies wäre aber eigentlich sehr merkwürdig).
Ob das so stimmt und wie man an dessen Daten per Pipe kommt, weiß ich jedoch nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19289
Erhaltene Danke: 1743

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 20.08.22 11:20 
Dafür kann man eine zweite passende Pipe aufmachen. Aus Versehen landet aber nichts in der falschen Pipe.

Ohne ein nachvollziehbares Beispiel lässt sich dazu aber wenig sagen. Wie wäre es, wenn du beide Programme auf ein Minimum reduzierst (je nachdem wie viel davon du hier veröffentlichen würdest) und die Projekte hier anhängst? So dass eben mindestens noch das Starten des anderen Projekts und dessen Ausgabe drin sind?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4706
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 20.08.22 15:11 
Th69 könnte da das richtige Näschen gehabt haben.

Source: size -h

unter der Annahme ich habe mich zum richtigen Source durchgekämpft ;)
Ausgaben gehen auf stderr

ausblenden C++-Quelltext
1:
2:
3:
4:
case 'h':
case 'H':
case '?':
  usage (stderr, 1);


Moderiert von user profile iconTh69: URL-Titel hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4791
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 20.08.22 16:39 
Und nm -h gibt auf stdout aus...
ausblenden C
1:
2:
3:
case 'H':
case 'h':
  usage (stdout, 0);

Und auch der Prozess-Rückgabewert (2. Parameter) ist unterschiedlich.
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Sa 20.08.22 18:49 
Danke, Ihr seit genial!!! Ich werde das mal versuchen zu lösen, evtl. kann man ja stderr auf stdout umleiten.

Gruß
GuaAck
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Sa 20.08.22 21:25 
Hallo, voller Erfolg!

Man muss nur bei "CreateProcess" in "StartupInfo" den "Pipe.Input" auch dem "StdError" zuweisen.
Danke nochmals,
Gruß GuaAck