diff options
Diffstat (limited to 'LibSystemdCli/CommandExecutor.cs')
-rw-r--r-- | LibSystemdCli/CommandExecutor.cs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/LibSystemdCli/CommandExecutor.cs b/LibSystemdCli/CommandExecutor.cs new file mode 100644 index 0000000..096f1c1 --- /dev/null +++ b/LibSystemdCli/CommandExecutor.cs @@ -0,0 +1,59 @@ +using System.Diagnostics; + +namespace LibSystemdCli; + +public class CommandExecutor +{ + public static async Task<string> ExecuteCommand(string command, string args) + { + Console.WriteLine($"[{DateTime.Now:O}] Executing command: {command} {args}"); + var process = new Process + { + StartInfo = + { + FileName = command, + Arguments = args, + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false + } + }; + process.Start(); + var output = await process.StandardOutput.ReadToEndAsync(); + var error = await process.StandardError.ReadToEndAsync(); + await process.WaitForExitAsync(); + if (process.ExitCode != 0) + { + throw new Exception($"Command {command} {args} failed with exit code {process.ExitCode} and error: {error}"); + } + + return output; + } + + public static async IAsyncEnumerable<string> ExecuteCommandAsync(string command, string args) + { + Console.WriteLine($"[{DateTime.Now:O}] Executing command asynchronously: {command} {args}"); + var process = new Process + { + StartInfo = + { + FileName = command, + Arguments = args, + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false + } + }; + process.Start(); + while (!process.StandardOutput.EndOfStream) + { + var line = await process.StandardOutput.ReadLineAsync(); + yield return line; + } + await process.WaitForExitAsync(); + if (process.ExitCode != 0) + { + throw new Exception($"Command {command} {args} failed with exit code {process.ExitCode}"); + } + } +} \ No newline at end of file |