c# - mono - 调用 python 脚本 .py 文件
一、定义
命令行工具:在windows 下是 cmd.exe,在 mac 下使用 bash。
二、踩过的坑
使用 Process 类,启动一个“命令行工具”,在通过向标准输出流中写入标准的命令
(p.StandardInput.WriteLine(command))执行 py 文件。
主要的思想还是模仿命令行的命令执行方式。
导致的问题是,执行巨慢,看已经起了一个 python 的进程,但是就是执行不完,且cpu非常高。
后来换了种方式,完美执行。直接调用 python 可执行文件,py 文件已命令行参数形式传入。
三、调用方法
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
namespace xxx.Service.Utils
{
/// <summary>
/// 进程管理
/// </summary>
public class ProcessUtils
{
/// <summary>
/// 执行外部程序
/// </summary>
/// <param name="workingDir">工作目录</param>
/// <param name="exeFileFullName">可执行文件名</param>
/// <param name="args">命令行参数</param>
/// <param name="maxWaitSeconds">最大等待时间</param>
public void Execute(string workingDir
, string exeFileFullName
, string args
, int maxWaitSeconds = 5000) {
Console.WriteLine("ExecuteSync{0}\t{1}{0}\t{2}{0}\t{3}"
, Environment.NewLine
, workingDir
, exeFileFullName
, args);
try
{
Process process = new Process();
process.StartInfo.FileName = exeFileFullName;
process.StartInfo.Arguments = args;
process.StartInfo.WorkingDirectory = workingDir;
//process.StartInfo.UseShellExecute = true;
//process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
process.Start();
if (maxWaitSeconds > 0)
{
process.WaitForExit(maxWaitSeconds);
process.Close();
}
}
catch (Exception ex)
{
Console.WriteLine("异常:{2}msg={0} {2}err={1}"
, ex.Message
, ex.StackTrace
, Environment.NewLine);
}
Console.WriteLine("执行完成!");
}
}
}
标签:c#,mono,py,System,python,process,using,StartInfo From: https://blog.51cto.com/u_4518216/5804838