马路流星
回答者
回答于 2026-10-24
在C#中使用System.Diagnostics.Process类调用Python解释器,将文件路径作为命令行参数传递;在Python脚本中通过sys.argv获取该路径并进行文件操作。
实现步骤
1. C#端代码
using System.Diagnostics;
string pythonPath = "python"; // 或Python解释器的绝对路径
string scriptPath = @"C:\scripts\process_file.py";
string filePath = @"C:\data\my file.txt"; // 包含空格的路径
var startInfo = new ProcessStartInfo
{
FileName = pythonPath,
Arguments = $"\"{scriptPath}\" \"{filePath}\"",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using (var process = Process.Start(startInfo))
{
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
}
2. Python端代码(process_file.py)
import sys
if len(sys.argv) > 1:
file_path = sys.argv[1]
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
print(content)
else:
print("未接收到文件路径参数")
判断依据与适用条件
sys.argv[0]为脚本自身路径,sys.argv[1]为传入的第一个参数。- 适用于本地进程间通信场景,要求运行环境已安装Python且配置了环境变量,或在C#中指定了Python解释器的完整路径。
常见误区
- 路径含空格未加引号:若文件路径包含空格且未用双引号包裹,操作系统会将其拆分为多个参数,导致Python端解析错误。必须在C#的
Arguments中对路径加转义双引号。 - 编码不一致:C#与Python默认编码可能不同,读写文件时应显式指定统一编码(如UTF-8)。
- 阻塞问题:未调用
WaitForExit()或未异步读取输出流时,可能导致父进程挂起或死锁。