Hello!

Inspiré(e) de prendre part à la discussion ? Ou de poser une question ou demander de l’aide ?

Alors bienvenues dans les grands sujets des forums de La Bulle : m’inscrire.

Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires

Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.

Passer les espaces dans les noms de fichiers en argument de spawn Gnu/Linux
Auteur Message
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Dim 11 Oct 2015 12:42
Message Passer les espaces dans les noms de fichiers en argument de spawn Gnu/Linux
Bonjour, j'ai une autre question a propos des nom de fichier contenant des espace sur un système Gnu/Linux que je passe à spawn et la command "ls" par exemple me renvois un message d'eereur.

J'ai protégé les espace avec des '\', du coup ls prend bien le nom de fichier comme il doit mais le fichier n'existe pas.

"ls base\ name" renvoit not found pour "base name"

Merci pour votre aide.
Profil
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22283
Dim 11 Oct 2015 14:58
Message Re: Passer les espaces dans les noms de fichiers en argument de spawn Gnu/Linux
J’ai déplacé dans « Informatique, réseaux et Internet », comme ce n’est pas en rapport avec Ada.

Pour la commande, il faudrait que tu la poste littéralement, parce que les guillemets s’interprètent aussi, et je ne sais pas s’ils sont inclus ou pas dans la commande. Il faudrait aussi préciser pour quel shell.

Tu peux utiliser cet balisage : [ code ] [ / code ] (sans les espaces).

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Lun 12 Oct 2015 18:04
Message Re: Passer les espaces dans les noms de fichiers en argument de spawn Gnu/Linux
Si si, c'est fait avec Ada, j'appelle spawn qui se passe de shell si non je pourais tapper "cd" et ça marcherait.


Bref je passe à ls un nom de ficher avec des espace, la questio et comment faire pour que ça passe.


Ls me répond :

Citation : 
file not found.
Profil
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Lun 12 Oct 2015 21:54
Message Re: Passer les espaces dans les noms de fichiers en argument de spawn Gnu/Linux
J'ai trouvé, c'était Argument_List_To_String qui cindait les nom de fichier avec espace en plusieurs arg.


Du coup après je supprime les '"' que j'ai ajouté avant pour pas que Argument_List_To_String me coupe les nom de fichier avent de passer le l'argument à spawn.

Merci.
Profil
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Mar 13 Oct 2015 19:14
Message Re: Passer les espaces dans les noms de fichiers en argument de spawn Gnu/Linux
Bonjour, bonjour Hibou, et Bonjour Zen au cas ou vous ne saviez pas ou aller....

J'éhsite à creer un nouveau sujet pour une nouvelle question connexe.
Mais sensiblement un autre problème qui merite toute mon attention.

Je cherche comment passe la commande Gnu/Linux "find" à spawn avec Ada évidemment.
J'utilise spawn en passant chaque argument dans un tableau d'argument sauf le 0 en C qui est le premier donc la commande que spawn attend dans un autre paramètre.

Ma commande vous pensez bien ne se limite pas à find ; C'est avec -exec que ça me renvoit : Missing argument to '-exec.

Ma commande exact avec un ficher ./TODO dans le répertoire courant est :
Citation : 
find . -name TODO -exec grep command {} \;


Le message de retour est :
Citation : 
/usr/bin/find: missing argument to `-exec'


Chacune des espaces de la ligne de commande séparant chacun des arguments. passé dans le tableau d'argument à spawn de la manière suivante avec Ada

Source Ada : 

function Spawn(Line : in String) return Spawn_Result_Type is

Command : Gnat.Command_Line.Command_Line;

Spawn_Result : Spawn_Result_Type;

Buffer_args, Arguments_List : Os_Lib.Argument_List_Access;

File : Text_Io.File_Type;
Deleted : Boolean := False;

Exec_Path : Os_Lib.String_Access;
Initialized : Boolean := False;
begin

--Set_Command_Line(Command, Line);
Arguments_List := Argument_String_To_List(Line);
--Gnat.Command_Line.Build(Command, Arguments_List, False);

if Arguments_List(1) /= null and then Arguments_List(1).all /= "" then


if Arguments_List'length > 1 then

Buffer_Args := new Argument_List(1..Arguments_List'Last - 1);

for I in 1..Arguments_List'Last - 1 loop

Buffer_Args(I) := new String ' (Normalize_Quoted_argument(Arguments_List(I+1).all));
end loop;

Spawn_Result := (
Process_Id => Invalid_Pid,
Program_Name => +Arguments_List(1).all,
Args => Buffer_Args,
Output_File => +"/tmp/out_file.txt",
Success => False,
Return_Code => 0,
Err_To_Out => True,
File_content => null
);




else


Spawn_Result := (
Process_Id => Invalid_Pid,
Program_Name => +Arguments_List(1).all,
Args => new Argument_List ' (1..0 => new String ' ("" & Character'Val(0))),
Output_File => +"/tmp/out_file.txt",
Success => False,
Return_Code => 0,
Err_To_Out => True,
File_content => null

);
end if;



if Locate_Exec_On_Path(Arguments_List(1).all) /= null then
Exec_Path := new String ' (Locate_Exec_On_Path(Arguments_List(1).all).all);


if Is_Executable_File(Exec_Path.all) then


Os_Lib.Normalize_Arguments(Arguments_List.all);


Spawn_Result.Process_Id :=
Non_Blocking_Spawn(Program_Name => Exec_Path.all,
Args => Spawn_Result.Args.all,
Output_File => (-Spawn_Result.Output_File),
Err_To_Out => Spawn_Result.Err_To_out
);

if Spawn_Result.Process_Id /= Gnat.Os_Lib.Invalid_Pid then

Gnat.Os_Lib.Wait_Process(Spawn_Result.Process_Id, Spawn_Result.Success);

end if;

Spawn_Result.File_Content := new Variadic_Array(1..1);

Text_Io.Open(File, Text_Io.In_File, (-Spawn_Result.Output_File));

while not Text_Io.End_Of_File(File) loop

declare

Line : constant String := Text_Io.Get_Line(File);
Buffer : Variadic_Access;
begin
if Spawn_Result.File_Content /= null then
if Initialized then
Buffer := new Variadic_Array(1..(Spawn_Result.File_Content'Length)+1);
Buffer(Buffer'First..Buffer'Last-1) := Spawn_Result.File_Content.all;
Buffer(Buffer'Last) := (+Line);
else
Buffer := new Variadic_Array(1..1);
Buffer(Buffer'Last) := (+Line);
Initialized := True;
end if;



end if;

Spawn_Result.File_Content := new Variadic_Array ' (Buffer.all);


end;

end loop;

Text_Io.Close(File);
Delete_File (Name => (-Spawn_Result.Output_File), Success => deleted);

if not Spawn_Result.Success then
Spawn_Result.Return_Code := Gnat.Os_Lib.Errno;
end if;
else
Spawn_Result.File_Content := new Variadic_Array ' (1 => (+(Arguments_List(1).all & " : command not found.")));
Spawn_Result.Return_Code := 127;
end if;
else
Spawn_Result.File_Content := new Variadic_Array ' (1 => (+(Arguments_List(1).all & " : command not found.")));
Spawn_Result.Return_Code := 127;
end if;
else
Spawn_Result.File_Content := new Variadic_Array ' (1 => (+(Arguments_List(1).all & " : command not found.")));
Spawn_Result.Return_Code := 127;
end if;

return Spawn_Result;
end Spawn;



En fait je suis en train de remarquer que j'ai utilisé Non_Blocking_Spawn.
C'est probablement pour une bonne raison.
Je suis sur Gnu/Linux Debian jessie j'utilise Gnat 4.9.2.

Si vous avez un tuyau, n'importe quelle piste, je suis planté avec cet -exec.

Mon programme complet à jour est sur Sourceforge sous le nom de projet GnuArchman.

Merci pour vos réponses.
Profil
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Lun 5 Mar 2018 17:47
Message Re: Passer les espaces dans les noms de fichiers en argument de spawn Gnu/Linux
Bonjour,

J'ai réussi à passer l'argument exec de find à spawn.
J'ai pas du changer grand chose.
Je me demand si find n'a pas été modifié.

En tout cas ça marche. Merci à tout le monde.
Profil