c#调用直接运行python脚本

文章资讯 2020-07-19 11:33:20

c#调用直接运行python脚本

using IronPython.Compiler.Ast;
using IronPython.Hosting;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


namespace WpfAppforpython
{
///


/// MainWindow.xaml 的交互逻辑
///

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
var psi = new ProcessStartInfo();
psi.FileName = @"C:ProgramDataAnaconda3python.exe";

var script = @"C:UsersAdministratorapp.py";

psi.Arguments = $""{script}"";

psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;

var errors = "";
var results = "";

using (var process = Process.Start(psi))
{
errors = process.StandardError.ReadToEnd();
results = process.StandardOutput.ReadToEnd();
}



Console.WriteLine("Error");
Console.WriteLine(errors);
Console.WriteLine();
Console.WriteLine("Results");
Console.WriteLine(results);

}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
//1
var engine = Python.CreateEngine();

//2
var script = @"C:UsersAdministratorapp.py";
var source = engine.CreateScriptSourceFromFile(script);

//var argv = new List();
//argv.Add("");

//engine.GetSysModule().SetVariable("argv", argv);

//3
var eIO = engine.Runtime.IO;

var errors = new MemoryStream();
eIO.SetErrorOutput(errors, Encoding.Default);

var results = new MemoryStream();
eIO.SetOutput(results, Encoding.Default);

//4
var scope = engine.CreateScope();
source.Execute(scope);

//5
string str(byte[] x) => Encoding.Default.GetString(x);

Console.WriteLine("Error");
Console.WriteLine(str(errors.ToArray()));
Console.WriteLine();
Console.WriteLine("Results");
Console.WriteLine(str(results.ToArray()));
}
}
}
调用了anaconda的python3.8 exe, 直接运行python脚本。

问题是打包没有实现。

pyinstaller对第三方包,特别是matpoltlib难以实现;nuitka7个小时都没能完成打包。

ironpython对第三方包几乎都无法支持,还是matplotlib。

现在的情况是如果直接使用C#进行科学计算和绘图,则方便打包。