c# - mono - 调用 python 脚本 .py 文件

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("执行完成!");
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章