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环境下自动化任务提供了一个强大而灵活的工具。无论是进行系统管理、软件部署还是其他自动化任务,这种方法都能大大提高效率和准确性。