Bonjour à tous et toutes,
Le problème est le suivant:
J'ai un programme (un binaire sans code source dont je ne suis pas l'auteur) qui fonctionne dans un terminal. Une fois lancé, la seule manière de l'arrêter est de tapper "quit" dans le terminal. Ce programme fonctionne parfaitement bien et se termine lors de l'envois de cette commande "quit" sur le stdin...
Pour les besoins d'un projet (une sorte de GUI) je dois lancer ce programme depuis une autre application, j'utilise pour cela un TProcess. Actuellement j'arrive a lancer mon programme, récupérer la sortie stdout et traiter les retours. Mais la ou je coince c'est lorsque j'essaye de fermer mon programme, vu que je ne peux le fermer proprement que par l'envoie de la commande "quit" en stdin ! En effet la fonction de TProcess permettant de le faire ne semble pas fonctionner ! Pourtant aucun message d'erreur n'est généré et le code (aussi loin que je suis remonté dans les ancètres du TProcess et des TInputPipeStream et TOutputPipeStream) semble correctement écrit... Mais rien ne se passe...
Si quelqu'un a déjà rencontré ce problème ou si quelqu'un a une solution, je suis preneur !
Quelques infos:
FPC v2.2.2
LAZARUS v0.9.26(beta)
OS Linux
FONCTION UTILISÉE TProcess.Input.Write(const Buffer; Count: Longint): Longint:
PARTIE DU CODE:
APPELÉE PAR:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TMyProcess.WriteLine(const A_String: String); begin if (Length(A_String) > 0) then Input.Write(A_String[1], Length(A_String)); end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 const CRLF = #10; ... MyProcess.WriteLine('quit' + CRLF);
Partager