C# 在Linux系统下 通过 Bash 调用Python库进行交互

Bash(Bourne Again SHell)是一种广泛使用的Unix shell和命令语言,它提供了强大的命令行界面来与操作系统交互。对于Linux和macOS等系统,Bash脚本是自动化日常任务的常用工具。

场景介绍

在Linux或macOS环境下执行一系列自动化任务,如软件安装、系统配置或数据处理等。这些任务可以通过Bash脚本轻松完成,但你的应用程序是用C#编写的。因此,你需要一种方法从C#代码中调用Bash脚本。

Bash代码

    public class BashScriptRunner
    {
        public static async Task<string> ExecuteBash(string workDirectory, string command, string outputIndicator)
        {
            var processInfo = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{command}\"",
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true,
                WorkingDirectory = workDirectory
            };

            using var process = new Process { StartInfo = processInfo };
            process.Start();

            try
            {
                await process.WaitForExitAsync(new CancellationTokenSource(30000).Token);
            }
            catch (TaskCanceledException e)
            {
                var error = string.Empty;
                try
                {
                    error = await process.StandardError.ReadToEndAsync();
                }
                catch (Exception)
                {
                    // ignored
                }

                return default;
            }

            if (process.ExitCode < 0)
            {
                string errors = await process.StandardError.ReadToEndAsync();
                throw new Exception(errors);
            }
            else
            {
                var processOutput = process.StandardOutput;

                if (string.IsNullOrEmpty(outputIndicator)) return await processOutput.ReadToEndAsync();

                while (await processOutput.ReadLineAsync() is { } block)
                {
                    if (block == outputIndicator)
                    {
                        return await processOutput.ReadToEndAsync();
                    }
                }
                return await processOutput.ReadToEndAsync();

            }
        }

    }

调用代码

BashScriptRunner.ExecuteBash(调用bash的路径, 需要执行的代码, "");

使用场景

假设你需要在多个服务器上执行系统维护脚本。通过使用BashScriptRunner类,你可以编写C#代码来远程执行这些Bash脚本,而无需手动登录到每台服务器上。这种方法不仅节省了时间,而且还提高了自动化任务的可靠性和准确性。
调用代码

当你需要从你的C#应用程序中调用Bash脚本时,可以这样做:

这行代码会异步执行指定的Bash脚本,并等待执行完成。如果脚本执行成功,它会返回脚本的输出。如果执行失败,它会抛出一个异常。

结论

通过BashScriptRunner类,我们可以轻松地从C#应用程序中调用Bash脚本,这为在Linux和macOS环境下自动化任务提供了一个强大而灵活的工具。无论是进行系统管理、软件部署还是其他自动化任务,这种方法都能大大提高效率和准确性。

posted @ 2023-09-18 21:21  初久的私房菜  阅读(7407)  评论(0编辑  收藏  举报
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/