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环境下自动化任务提供了一个强大而灵活的工具。无论是进行系统管理、软件部署还是其他自动化任务,这种方法都能大大提高效率和准确性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
2021-09-18 九、Abp vNext 基础篇丨评论聚合功能
2020-09-18 知识全聚集 .Net Core 技术突破 | 如何实现一个模块化方案一