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