Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tutorial Rodando Python no C#

3,871 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

×