SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Tutorial [Introdutório]: Criando
 Pluging IronPython para c#




     Por: Eduardo dos Santos Pereira
            Dr. em Astrofísica
       pereira.somoza@gmail.com
Tutorial [Introdutório]: Criando
     Pluging IronPython para c#
   Instituto Nacional de Pesquisas Espaciais/DEA


Apresentado uma breve introdução de como
rodar um script IronPython dentro do C#, isso
permitiria a criação de plugins em IronPython
para projetos que originalmente forma escritos
em c#.
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
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.
Passo 1: Criação de Uma Nova
           Solução
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
Abrindo o Formulário
Abrindo Formulário
Criar Botão para Chamar o Script
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 dll's necessárias são:
       IronPython.dll
       IronPython.Modules.dll
       Microsoft.Scripting.dll
       Microsoft.Dynamic.dll
       Microsoft.Scripting.Metadata.dll
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.
Adicionar Referências
Adicionando Referências
Definindo para que as Referências Sejam
Copiadas para o Diretório do Executável Final
Fazer com que as Referências do IronPython
  sejam salvas no Diretório do Executável
O código para a Chamada
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:
Passo 4: Programando
using 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;
Passo 4: Programando
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
                                                     Gerado pelo Visual Studio
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;
Passo 4: Programando
using 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;
Passo 4: Programando
using 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 IronPython
using System.Reflection;                             E o Microsoft.Scripting para
using 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;
Passo 4: Programando
namespace 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);
    }
Passo 4: Programando
namespace 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);
    }
Passo 4: Programando
namespace 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);
    }
Passo 4: Programando
namespace 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);
    }
Passo 4: Programando
public 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;
        }

    }
}
Passo 4: Programando
public 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;
        }

    }
}
Passo 4: Programando
public 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;
        }

    }
}
Passo 4: Programando
public 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;
        }

    }
}
Passo 4: Programando
public 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;
        }

    }
}
Passo 5: Criar a Pastas que
    conterá os scripts
Passo 6: Criando o Script
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#
Passo 6: Criando o Script
import clr
import sys
import time
clr.AddReference("System")
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
clr.AddReference('IronPython')


from System.Windows.Forms import Application, Form, Button,
Panel
from System.Drawing import Size

from IronPython.Compiler import CallTarget0

class myForm(Form):

  def __init__(self):
    self.Text = 'MyApp'
    self.CenterToScreen()
    self.Size = Size(590,550)

if __name__ == "__main__":
    myapp = myForm()
Passo 6: Criando o Script
import clr
import sys
import time                                           Adicionando as Referências
clr.AddReference("System")
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
clr.AddReference('IronPython')


from System.Windows.Forms import Application, Form, Button,
Panel
from System.Drawing import Size

from IronPython.Compiler import CallTarget0

class myForm(Form):

  def __init__(self):
    self.Text = 'MyApp'
    self.CenterToScreen()
    self.Size = Size(590,550)

if __name__ == "__main__":
    myapp = myForm()
Passo 6: Criando o Script
import clr
import sys                                              Chamda dos Módulos
import time                                                 Necessário
clr.AddReference("System")
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
clr.AddReference('IronPython')


from System.Windows.Forms import Application, Form, Button,
Panel
from System.Drawing import Size

from IronPython.Compiler import CallTarget0

class myForm(Form):

  def __init__(self):
    self.Text = 'MyApp'
    self.CenterToScreen()
    self.Size = Size(590,550)

if __name__ == "__main__":
    myapp = myForm()
Passo 6: Criando o Script
import clr
import sys
import time
clr.AddReference("System")
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
clr.AddReference('IronPython')

                                                   Criando a Classe Formulário
from System.Windows.Forms import Application, Form, Button,
Panel
from System.Drawing import Size

from IronPython.Compiler import CallTarget0

class myForm(Form):

  def __init__(self):
    self.Text = 'MyApp'
    self.CenterToScreen()
    self.Size = Size(590,550)

if __name__ == "__main__":
    myapp = myForm()
Passo 6: Criando o Script
import clr
import sys
import time
clr.AddReference("System")
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
clr.AddReference('IronPython')


from System.Windows.Forms import Application, Form, Button,
Panel
from System.Drawing import Size

from IronPython.Compiler import CallTarget0

class myForm(Form):                      Executando o Programa
  def __init__(self):
    self.Text = 'MyApp'
    self.CenterToScreen()
    self.Size = Size(590,550)

if __name__ == "__main__":
    myapp = myForm()
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
Adicionado o Script,
Lembrar de mudar para Guardar Script no
   diretório onde está o executável
Rodando no Modo Debug
   FIM

Contenu connexe

En vedette

Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Pythongsroma
 
API de análise de sentimentos levando em conta contexto a partir de lógica di...
API de análise de sentimentos levando em conta contexto a partir de lógica di...API de análise de sentimentos levando em conta contexto a partir de lógica di...
API de análise de sentimentos levando em conta contexto a partir de lógica di...Eduardo S. Pereira
 
Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.
Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.
Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.Eduardo S. Pereira
 
Arduino Day 2017 - Python + Arduino
Arduino Day 2017 - Python + ArduinoArduino Day 2017 - Python + Arduino
Arduino Day 2017 - Python + ArduinoEduardo S. Pereira
 

En vedette (7)

Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Python
 
API de análise de sentimentos levando em conta contexto a partir de lógica di...
API de análise de sentimentos levando em conta contexto a partir de lógica di...API de análise de sentimentos levando em conta contexto a partir de lógica di...
API de análise de sentimentos levando em conta contexto a partir de lógica di...
 
Swig Tutorial
Swig TutorialSwig Tutorial
Swig Tutorial
 
Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.
Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.
Do Cosmos a Terra: Usando Python para desvendar os mistérios do Universo.
 
Interfacing C/C++ and Python with SWIG
Interfacing C/C++ and Python with SWIGInterfacing C/C++ and Python with SWIG
Interfacing C/C++ and Python with SWIG
 
Generators: The Final Frontier
Generators: The Final FrontierGenerators: The Final Frontier
Generators: The Final Frontier
 
Arduino Day 2017 - Python + Arduino
Arduino Day 2017 - Python + ArduinoArduino Day 2017 - Python + Arduino
Arduino Day 2017 - Python + Arduino
 

Similaire à Tutorial Rodando Python no C#

Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECLPHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECLErick Belluci Tedeschi
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-toolunifesptk
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoMario Chaves
 
Artigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraArtigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraGoncalvinho
 
Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Vanderson Silva
 
Aumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring BootAumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring BootFernando Boaglio
 
Respiração Programada
Respiração ProgramadaRespiração Programada
Respiração ProgramadaMarcelo Diniz
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyantonio sérgio nogueira
 

Similaire à Tutorial Rodando Python no C# (20)

django.pptx
django.pptxdjango.pptx
django.pptx
 
Internacionalizacao
InternacionalizacaoInternacionalizacao
Internacionalizacao
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECLPHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Tutorial poke-tool
Tutorial poke-toolTutorial poke-tool
Tutorial poke-tool
 
Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
 
aula5_python.pdf
aula5_python.pdfaula5_python.pdf
aula5_python.pdf
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em django
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
Artigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraArtigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobra
 
Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3
 
Desenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECLDesenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECL
 
Aumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring BootAumente sua produtividade com Spring Boot
Aumente sua produtividade com Spring Boot
 
Respiração Programada
Respiração ProgramadaRespiração Programada
Respiração Programada
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
 
Threads
ThreadsThreads
Threads
 

Plus de Eduardo S. Pereira

Lista de Exercícios de Probabilidade e Estatística do Segundo Bimestre
Lista de Exercícios de Probabilidade e Estatística do Segundo BimestreLista de Exercícios de Probabilidade e Estatística do Segundo Bimestre
Lista de Exercícios de Probabilidade e Estatística do Segundo BimestreEduardo S. Pereira
 
Aula 10 Probabilidade e Estatística
Aula 10 Probabilidade e EstatísticaAula 10 Probabilidade e Estatística
Aula 10 Probabilidade e EstatísticaEduardo S. Pereira
 
Aula de Probabilidade e Estatítisca Revisão
Aula de Probabilidade e Estatítisca RevisãoAula de Probabilidade e Estatítisca Revisão
Aula de Probabilidade e Estatítisca RevisãoEduardo S. Pereira
 
Atividade prática Probabilidade e Estatística
Atividade prática Probabilidade e EstatísticaAtividade prática Probabilidade e Estatística
Atividade prática Probabilidade e EstatísticaEduardo S. Pereira
 
Probabilidade e Estatítica Lista de Exercícios 1
Probabilidade e Estatítica Lista de Exercícios 1Probabilidade e Estatítica Lista de Exercícios 1
Probabilidade e Estatítica Lista de Exercícios 1Eduardo S. Pereira
 
Probabilidade e Estatística Tabelas de Frequência
Probabilidade e Estatística Tabelas de FrequênciaProbabilidade e Estatística Tabelas de Frequência
Probabilidade e Estatística Tabelas de FrequênciaEduardo S. Pereira
 
Probabilidade e Estatística Boxplot
Probabilidade e Estatística BoxplotProbabilidade e Estatística Boxplot
Probabilidade e Estatística BoxplotEduardo S. Pereira
 
Primeira Lista de Exercícios de Modelagem de Dados
Primeira Lista de Exercícios de Modelagem de DadosPrimeira Lista de Exercícios de Modelagem de Dados
Primeira Lista de Exercícios de Modelagem de DadosEduardo S. Pereira
 
Aula 7 - Algoritmos e Estrutura de Dados
Aula 7 - Algoritmos e Estrutura de DadosAula 7 - Algoritmos e Estrutura de Dados
Aula 7 - Algoritmos e Estrutura de DadosEduardo S. Pereira
 

Plus de Eduardo S. Pereira (20)

Lista de Exercícios de Probabilidade e Estatística do Segundo Bimestre
Lista de Exercícios de Probabilidade e Estatística do Segundo BimestreLista de Exercícios de Probabilidade e Estatística do Segundo Bimestre
Lista de Exercícios de Probabilidade e Estatística do Segundo Bimestre
 
Aula 10 Probabilidade e Estatística
Aula 10 Probabilidade e EstatísticaAula 10 Probabilidade e Estatística
Aula 10 Probabilidade e Estatística
 
Aula de Probabilidade e Estatítisca Revisão
Aula de Probabilidade e Estatítisca RevisãoAula de Probabilidade e Estatítisca Revisão
Aula de Probabilidade e Estatítisca Revisão
 
Atividade prática Probabilidade e Estatística
Atividade prática Probabilidade e EstatísticaAtividade prática Probabilidade e Estatística
Atividade prática Probabilidade e Estatística
 
Probabilidade e Estatítica Lista de Exercícios 1
Probabilidade e Estatítica Lista de Exercícios 1Probabilidade e Estatítica Lista de Exercícios 1
Probabilidade e Estatítica Lista de Exercícios 1
 
Probabilidade e Estatística Tabelas de Frequência
Probabilidade e Estatística Tabelas de FrequênciaProbabilidade e Estatística Tabelas de Frequência
Probabilidade e Estatística Tabelas de Frequência
 
Probabilidade e Estatística Boxplot
Probabilidade e Estatística BoxplotProbabilidade e Estatística Boxplot
Probabilidade e Estatística Boxplot
 
Aula 11 Modelagem de Dados
Aula 11 Modelagem de DadosAula 11 Modelagem de Dados
Aula 11 Modelagem de Dados
 
Aula 10 Modelagem de Dados
Aula 10 Modelagem de DadosAula 10 Modelagem de Dados
Aula 10 Modelagem de Dados
 
Aula 9 Modelagem de Dados
Aula 9 Modelagem de DadosAula 9 Modelagem de Dados
Aula 9 Modelagem de Dados
 
Aula 7 Modelagem de Dados
Aula 7 Modelagem de DadosAula 7 Modelagem de Dados
Aula 7 Modelagem de Dados
 
Aula 8 Modelagem de Dados
Aula 8 Modelagem de DadosAula 8 Modelagem de Dados
Aula 8 Modelagem de Dados
 
Primeira Lista de Exercícios de Modelagem de Dados
Primeira Lista de Exercícios de Modelagem de DadosPrimeira Lista de Exercícios de Modelagem de Dados
Primeira Lista de Exercícios de Modelagem de Dados
 
Aula 06 Modelagem de Dados
Aula 06 Modelagem de DadosAula 06 Modelagem de Dados
Aula 06 Modelagem de Dados
 
Aula05
Aula05Aula05
Aula05
 
Aula04
Aula04Aula04
Aula04
 
Aula03
Aula03Aula03
Aula03
 
Aula02
Aula02Aula02
Aula02
 
Aula01
Aula01Aula01
Aula01
 
Aula 7 - Algoritmos e Estrutura de Dados
Aula 7 - Algoritmos e Estrutura de DadosAula 7 - Algoritmos e Estrutura de Dados
Aula 7 - Algoritmos e Estrutura de Dados
 

Tutorial Rodando Python no C#

  • 1. Tutorial [Introdutório]: Criando Pluging IronPython para c# Por: Eduardo dos Santos Pereira Dr. em Astrofísica pereira.somoza@gmail.com
  • 2. Tutorial [Introdutório]: Criando Pluging IronPython para c#  Instituto Nacional de Pesquisas Espaciais/DEA Apresentado uma breve introdução de como rodar um script IronPython dentro do C#, isso permitiria a criação de plugins em IronPython para projetos que originalmente forma escritos em c#.
  • 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. 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. Passo 1: Criação de Uma Nova Solução
  • 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
  • 9. Criar Botão para Chamar o Script
  • 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 dll's necessárias são:  IronPython.dll  IronPython.Modules.dll  Microsoft.Scripting.dll  Microsoft.Dynamic.dll  Microsoft.Scripting.Metadata.dll
  • 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.
  • 14. Definindo para que as Referências Sejam Copiadas para o Diretório do Executável Final
  • 15. Fazer com que as Referências do IronPython sejam salvas no Diretório do Executável
  • 16. O código para a Chamada
  • 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. Passo 4: Programando using 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. Passo 4: Programando using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; Gerado pelo Visual Studio 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;
  • 20. Passo 4: Programando using 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. Passo 4: Programando using 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 IronPython using System.Reflection; E o Microsoft.Scripting para using 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. Passo 4: Programando namespace 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. Passo 4: Programando namespace 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. Passo 4: Programando namespace 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. Passo 4: Programando namespace 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. Passo 4: Programando public 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. Passo 4: Programando public 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. Passo 4: Programando public 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. Passo 4: Programando public 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. Passo 4: Programando public 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. Passo 5: Criar a Pastas que conterá os scripts
  • 32. Passo 6: Criando o Script
  • 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. Passo 6: Criando o Script import clr import sys import time clr.AddReference("System") clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReference('IronPython') from System.Windows.Forms import Application, Form, Button, Panel from System.Drawing import Size from IronPython.Compiler import CallTarget0 class myForm(Form): def __init__(self): self.Text = 'MyApp' self.CenterToScreen() self.Size = Size(590,550) if __name__ == "__main__": myapp = myForm()
  • 35. Passo 6: Criando o Script import clr import sys import time Adicionando as Referências clr.AddReference("System") clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReference('IronPython') from System.Windows.Forms import Application, Form, Button, Panel from System.Drawing import Size from IronPython.Compiler import CallTarget0 class myForm(Form): def __init__(self): self.Text = 'MyApp' self.CenterToScreen() self.Size = Size(590,550) if __name__ == "__main__": myapp = myForm()
  • 36. Passo 6: Criando o Script import clr import sys Chamda dos Módulos import time Necessário clr.AddReference("System") clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReference('IronPython') from System.Windows.Forms import Application, Form, Button, Panel from System.Drawing import Size from IronPython.Compiler import CallTarget0 class myForm(Form): def __init__(self): self.Text = 'MyApp' self.CenterToScreen() self.Size = Size(590,550) if __name__ == "__main__": myapp = myForm()
  • 37. Passo 6: Criando o Script import clr import sys import time clr.AddReference("System") clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReference('IronPython') Criando a Classe Formulário from System.Windows.Forms import Application, Form, Button, Panel from System.Drawing import Size from IronPython.Compiler import CallTarget0 class myForm(Form): def __init__(self): self.Text = 'MyApp' self.CenterToScreen() self.Size = Size(590,550) if __name__ == "__main__": myapp = myForm()
  • 38. Passo 6: Criando o Script import clr import sys import time clr.AddReference("System") clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReference('IronPython') from System.Windows.Forms import Application, Form, Button, Panel from System.Drawing import Size from IronPython.Compiler import CallTarget0 class myForm(Form): Executando o Programa def __init__(self): self.Text = 'MyApp' self.CenterToScreen() self.Size = Size(590,550) if __name__ == "__main__": myapp = myForm()
  • 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. Adicionado o Script, Lembrar de mudar para Guardar Script no diretório onde está o executável
  • 42. FIM