40 lines
1.3 KiB
Ada
40 lines
1.3 KiB
Ada
with Ada.Text_IO; use Ada.Text_IO;
|
|
with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
|
|
with GNAT.Expect; use GNAT.Expect;
|
|
with GNAT.OS_Lib; use GNAT.OS_Lib;
|
|
with GNAT.String_Split; use GNAT.String_Split;
|
|
|
|
procedure System_Command is
|
|
Command : String := "ls -l";
|
|
Args : Argument_List_Access;
|
|
Status : aliased Integer;
|
|
Separators : constant String := LF & CR;
|
|
Reply_List : Slice_Set;
|
|
|
|
begin
|
|
Args := Argument_String_To_List (Command);
|
|
-- execute the system command and get the output in a single string
|
|
declare
|
|
Response : String :=
|
|
Get_Command_Output
|
|
(Command => Args (Args'First).all,
|
|
Arguments => Args (Args'First + 1 .. Args'Last),
|
|
Input => "",
|
|
Status => Status'Access);
|
|
begin
|
|
Free (Args);
|
|
-- split the output in a slice for easier manipulation
|
|
if Status = 0 then
|
|
Create (S => Reply_List,
|
|
From => Response,
|
|
Separators => Separators,
|
|
Mode => Multiple);
|
|
end if;
|
|
end;
|
|
-- do something with the system output. Just print it out
|
|
for I in 1 .. Slice_Count (Reply_List) loop
|
|
Put_Line (Slice (Reply_List, I));
|
|
end loop;
|
|
|
|
end System_Command;
|