Tutorial Rodando Python no C#

2,586 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,586
On SlideShare
0
From Embeds
0
Number of Embeds
244
Actions
Shares
0
Downloads
61
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tutorial Rodando Python no C#

  1. 1. Tutorial [Introdutório]: Criando Pluging IronPython para c# Por: Eduardo dos Santos Pereira Dr. em Astrofísica pereira.somoza@gmail.com
  2. 2. Tutorial [Introdutório]: Criando Pluging IronPython para c# Instituto Nacional de Pesquisas Espaciais/DEAApresentado uma breve introdução de comorodar um script IronPython dentro do C#, issopermitiria a criação de plugins em IronPythonpara projetos que originalmente forma escritosem c#.
  3. 3. Materiais Nesse Tutorial é usado o IronPython 2.7, sendo que esse pode ser baixado no site www.ironpyton.net .Net 4.0 Também será usado o Visual Studio 2010 Express. É necessário o C# Visual Studio 2010 ou superior pelo fato de que as versões anteriores não são compatíveis com o .Net 4.0
  4. 4. Passo 1 O primeiro passo será o de criar uma nova solução no Visual Studio. Aqui será criado um novo aplicativo do Windows, ao estilo formulário.
  5. 5. Passo 1: Criação de Uma Nova Solução
  6. 6. Passo 2: Abrindo o Formulário Agora será adicionado um Botão no Formulário. Após a adição do botão, com um duplo clique no formulário será adicionado ao projeto o arquivo Form1.cs Nesse arquivo será acrescentada a chamada do script
  7. 7. Abrindo o Formulário
  8. 8. Abrindo Formulário
  9. 9. Criar Botão para Chamar o Script
  10. 10. Passo 3: Adicionando referências Agora é preciso adicionar as referências (.dll) do IronPython, essas normalmente se encontram em c:/Arquivos e Programas/IronPython 2.7/ As dlls necessárias são:  IronPython.dll  IronPython.Modules.dll  Microsoft.Scripting.dll  Microsoft.Dynamic.dll  Microsoft.Scripting.Metadata.dll
  11. 11. Passo 3: Adicionando referências Essas referencias precisam ser colocadas no diretório em que se encontra o arquivo executável. Isso irá permiter que o programa gerado rode em outra máquina que não possua o IronPython instalado Nas Próximas figuras são mostrados esses passos.
  12. 12. Adicionar Referências
  13. 13. Adicionando Referências
  14. 14. Definindo para que as Referências SejamCopiadas para o Diretório do Executável Final
  15. 15. Fazer com que as Referências do IronPython sejam salvas no Diretório do Executável
  16. 16. O código para a Chamada
  17. 17. Passo 4: Programando Agora serão acrescentadas as chamadas das referências e criação da rotina de execução do script. O código final ficará como segue:
  18. 18. Passo 4: Programandousing System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;/* * Extras System modules necessaries to execute * the python script. */using System.Collections;using System.IO;using System.Reflection;using System.Threading;/* * Iron Python Modules and Microsoft Script engine */using IronPython;using IronPython.Hosting;using IronPython.Runtime;using IronPython.Runtime.Exceptions;using Microsoft.Scripting;using Microsoft.Scripting.Hosting;
  19. 19. Passo 4: Programandousing System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing; Gerado pelo Visual Studiousing System.Linq;using System.Text;using System.Windows.Forms;/* * Extras System modules necessaries to execute * the python script. */using System.Collections;using System.IO;using System.Reflection;using System.Threading;/* * Iron Python Modules and Microsoft Script engine */using IronPython;using IronPython.Hosting;using IronPython.Runtime;using IronPython.Runtime.Exceptions;using Microsoft.Scripting;using Microsoft.Scripting.Hosting;
  20. 20. Passo 4: Programandousing System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;/* * Extras System modules necessaries to execute Usando Referências * the python script. Importantes */ Do Sistema.using System.Collections;using System.IO;using System.Reflection;using System.Threading;/* * Iron Python Modules and Microsoft Script engine */using IronPython;using IronPython.Hosting;using IronPython.Runtime;using IronPython.Runtime.Exceptions;using Microsoft.Scripting;using Microsoft.Scripting.Hosting;
  21. 21. Passo 4: Programandousing System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;/* * Extras System modules necessaries to execute * the python script. */using System.Collections;using System.IO; Chamando O IronPythonusing System.Reflection; E o Microsoft.Scripting parausing System.Threading; Trabalhar/* * Iron Python Modules and Microsoft Script engine */using IronPython;using IronPython.Hosting;using IronPython.Runtime;using IronPython.Runtime.Exceptions;using Microsoft.Scripting;using Microsoft.Scripting.Hosting;
  22. 22. Passo 4: Programandonamespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { /* * This button will start the python script into the new thread */ Thread myThread = new Thread( new ThreadStart(startPy)); myThread.Start(); } public static void startPy() { /* * This function is use to set de local directory that the * Python script program will be executed */ string filename = "/Scripts/Program.py"; string path = Assembly.GetExecutingAssembly().Location; string rootDir = Directory.GetParent(path).FullName; RunPythonFile(rootDir, filename); }
  23. 23. Passo 4: Programandonamespace WindowsFormsApplication1{ public partial class Form1 : Form { Código Gerado public Form1() Pelo Visual Studio { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { /* * This button will start the python script into the new thread */ Thread myThread = new Thread( new ThreadStart(startPy)); myThread.Start(); } public static void startPy() { /* * This function is use to set de local directory that the * Python script program will be executed */ string filename = "/Scripts/Program.py"; string path = Assembly.GetExecutingAssembly().Location; string rootDir = Directory.GetParent(path).FullName; RunPythonFile(rootDir, filename); }
  24. 24. Passo 4: Programandonamespace WindowsFormsApplication1{ public partial class Form1 : Form A Função que Chama { public Form1() O Script será Executada { Como uma nova Thread InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { /* * This button will start the python script into the new thread */ Thread myThread = new Thread( new ThreadStart(startPy)); myThread.Start(); } public static void startPy() { /* * This function is use to set de local directory that the * Python script program will be executed */ string filename = "/Scripts/Program.py"; string path = Assembly.GetExecutingAssembly().Location; string rootDir = Directory.GetParent(path).FullName; RunPythonFile(rootDir, filename); }
  25. 25. Passo 4: Programandonamespace WindowsFormsApplication1{ public partial class Form1 : Form Aqui são definidas as variáveis { filename, que informa o public Form1() A pastas e o script que será { InitializeComponent(); Executado. } Além disso é definido o diretório Onde está o executável. private void button1_Click(object sender, EventArgs e) { /* * This button will start the python script into the new thread */ Thread myThread = new Thread( new ThreadStart(startPy)); myThread.Start(); } public static void startPy() { /* * This function is use to set de local directory that the * Python script program will be executed */ string filename = "/Scripts/Program.py"; string path = Assembly.GetExecutingAssembly().Location; string rootDir = Directory.GetParent(path).FullName; RunPythonFile(rootDir, filename); }
  26. 26. Passo 4: Programandopublic static int RunPythonFile(string rootDir, string filename) { /* * Create a new engine object */ ScriptEngine engine = Python.CreateEngine(); /* * New source script */ ScriptSource source; source = engine.CreateScriptSourceFromFile(rootDir + filename); /* * Create a new scope object */ ScriptScope scope = engine.CreateScope(); /* * Executin the script */ int result = source.ExecuteProgram(); return result; } }}
  27. 27. Passo 4: Programandopublic static int RunPythonFile(string rootDir, string filename) { /* * Create a new engine object Criando o Objeto para */ A execução do Script ScriptEngine engine = Python.CreateEngine(); /* * New source script */ ScriptSource source; source = engine.CreateScriptSourceFromFile(rootDir + filename); /* * Create a new scope object */ ScriptScope scope = engine.CreateScope(); /* * Executin the script */ int result = source.ExecuteProgram(); return result; } }}
  28. 28. Passo 4: Programandopublic static int RunPythonFile(string rootDir, string filename) { /* Definindo qual Script * Create a new engine object Será Executado */ ScriptEngine engine = Python.CreateEngine(); /* * New source script */ ScriptSource source; source = engine.CreateScriptSourceFromFile(rootDir + filename); /* * Create a new scope object */ ScriptScope scope = engine.CreateScope(); /* * Executin the script */ int result = source.ExecuteProgram(); return result; } }}
  29. 29. Passo 4: Programandopublic static int RunPythonFile(string rootDir, string filename) { /* * Create a new engine object */ ScriptEngine engine = Python.CreateEngine(); Criando um Novo /* Escopo de execução * New source script */ ScriptSource source; source = engine.CreateScriptSourceFromFile(rootDir + filename); /* * Create a new scope object */ ScriptScope scope = engine.CreateScope(); /* * Executin the script */ int result = source.ExecuteProgram(); return result; } }}
  30. 30. Passo 4: Programandopublic static int RunPythonFile(string rootDir, string filename) { /* * Create a new engine object */ ScriptEngine engine = Python.CreateEngine(); /* * New source script */ ScriptSource source; source = engine.CreateScriptSourceFromFile(rootDir + filename); /* Colocando o Script para * Create a new scope object Rodar */ ScriptScope scope = engine.CreateScope(); /* * Executin the script */ int result = source.ExecuteProgram(); return result; } }}
  31. 31. Passo 5: Criar a Pastas que conterá os scripts
  32. 32. Passo 6: Criando o Script
  33. 33. Passo 6: Criando o Script O script em IronPython será algo bem simples, ele irá apenas abrir um novo formulário em uma nova janela. Por gerar uma nova janela, a opção de criar uma nova thread evita que ocorra um erro de gerenciamento, mas mais importante é que o novo script acaba sendo executado como uma função independente, mas que sua inicialização e finalização está ligada ao aplicativo original em C#
  34. 34. Passo 6: Criando o Scriptimport clrimport sysimport timeclr.AddReference("System")clr.AddReference("System.Windows.Forms")clr.AddReference("System.Drawing")clr.AddReference(IronPython)from System.Windows.Forms import Application, Form, Button,Panelfrom System.Drawing import Sizefrom IronPython.Compiler import CallTarget0class myForm(Form): def __init__(self): self.Text = MyApp self.CenterToScreen() self.Size = Size(590,550)if __name__ == "__main__": myapp = myForm()
  35. 35. Passo 6: Criando o Scriptimport clrimport sysimport time Adicionando as Referênciasclr.AddReference("System")clr.AddReference("System.Windows.Forms")clr.AddReference("System.Drawing")clr.AddReference(IronPython)from System.Windows.Forms import Application, Form, Button,Panelfrom System.Drawing import Sizefrom IronPython.Compiler import CallTarget0class myForm(Form): def __init__(self): self.Text = MyApp self.CenterToScreen() self.Size = Size(590,550)if __name__ == "__main__": myapp = myForm()
  36. 36. Passo 6: Criando o Scriptimport clrimport sys Chamda dos Módulosimport time Necessárioclr.AddReference("System")clr.AddReference("System.Windows.Forms")clr.AddReference("System.Drawing")clr.AddReference(IronPython)from System.Windows.Forms import Application, Form, Button,Panelfrom System.Drawing import Sizefrom IronPython.Compiler import CallTarget0class myForm(Form): def __init__(self): self.Text = MyApp self.CenterToScreen() self.Size = Size(590,550)if __name__ == "__main__": myapp = myForm()
  37. 37. Passo 6: Criando o Scriptimport clrimport sysimport timeclr.AddReference("System")clr.AddReference("System.Windows.Forms")clr.AddReference("System.Drawing")clr.AddReference(IronPython) Criando a Classe Formuláriofrom System.Windows.Forms import Application, Form, Button,Panelfrom System.Drawing import Sizefrom IronPython.Compiler import CallTarget0class myForm(Form): def __init__(self): self.Text = MyApp self.CenterToScreen() self.Size = Size(590,550)if __name__ == "__main__": myapp = myForm()
  38. 38. Passo 6: Criando o Scriptimport clrimport sysimport timeclr.AddReference("System")clr.AddReference("System.Windows.Forms")clr.AddReference("System.Drawing")clr.AddReference(IronPython)from System.Windows.Forms import Application, Form, Button,Panelfrom System.Drawing import Sizefrom IronPython.Compiler import CallTarget0class myForm(Form): Executando o Programa def __init__(self): self.Text = MyApp self.CenterToScreen() self.Size = Size(590,550)if __name__ == "__main__": myapp = myForm()
  39. 39. Adicionado o Script,Lembrar de mudar para Guardar Script no diretório onde está o executável  Lembre-se de definir no projeto que o Script deverá ser copiado para a pasta onde se encontra o executável no momento em que será gerada a solução
  40. 40. Adicionado o Script,Lembrar de mudar para Guardar Script no diretório onde está o executável
  41. 41. Rodando no Modo Debug
  42. 42.  FIM

×