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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值