IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

exécuter script R depuis C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Par défaut exécuter script R depuis C#
    Salut, je veux lancer un script R depuis C# lorsqu'un fichier est modifié. J'ai écrit le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
            {
                // Pour vérifier que la modification du fichier est détectée
                MessageBox.Show(string.Format("Changed: {0} {1}", e.FullPath, e.ChangeType));
     
                // Et on lance le script R
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.FileName = "C:/Program Files/R/R-2.12.0/bin/Rscript.exe";
                proc.StartInfo.WorkingDirectory = "C:/Program Files/R/R-2.12.0/bin/";
                proc.StartInfo.Arguments = "source('C:/chemincodeR/codeR.R')";
                proc.StartInfo.UseShellExecute = true;
                proc.StartInfo.RedirectStandardOutput = false;
                proc.Start();           
            }
        }
    }

    mais ça ne marche pas, est-ce que vous pouvez m'aider ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ça veut dire quoi "ça marche pas" ? il se passe quoi exactement ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Par défaut
    j'ai ajouté la commande Console.ReadKey(true); pour avoir le temps de voir ce qu'il y a d'écrit dans la console et le message d'erreur est
    fatal error, can not open file 'C:/chemincodeR/codeR.R'
    , alors que chemin est bon

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah bah dans ce cas c'est un problème avec R, pas avec C#... Ce serait pas à cause des slashes ? Normalement sous Windows on utilise des backslashes...

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Par défaut
    non je pense pas, puisque quand je tape source('C:/chemincodeR/codeR.R') dans R ça marche.
    J'ai peut-être une idée de pourquoi ça plante : quand on lance R, il y a un petit instant (2 secondes ?) où il se passe rien, puis R écrit du texte dans la console, et enfin il propose d'exécuter une commande. Ici mon programme C# propose la commande à R trop tôt, avant que celui-ci soit prêt pour exécuter une commande... J'aimerais bien tester avec un programme qui ouvre R, attends 5 secondes, puis propose une commande à R. Des idées pour faire ça ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu es sûr que RScript.exe accepte une commande comme ça en paramètre de ligne de commande ? Si tu dois le taper dans le prompt après avoir lancé RScript, ce n'est pas un paramètre...

    Il est sans doute possible de rediriger l'entrée standard, de faire un Thread.Sleep après le démarrage et d'écrire ensuite sur l'entrée standard. Un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.FileName = "C:/Program Files/R/R-2.12.0/bin/Rscript.exe";
                proc.StartInfo.WorkingDirectory = "C:/Program Files/R/R-2.12.0/bin/";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.Start();  
                Thread.Sleep(5000);
                proc.StandardInput.WriteLine("source('C:/chemincodeR/codeR.R')");
    (note qu'il faut mettre UseShellExecute à faise pour pouvoir faire ça ; tu avais une raison particulière de le mettre à true ?)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécuter script php depuis un autre serveur ?
    Par truser dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2014, 11h57
  2. [Débutant] Exécuter script powershell depuis Sharepoint
    Par thibautK dans le forum SharePoint
    Réponses: 28
    Dernier message: 14/06/2013, 10h31
  3. [Système] Exécuter script python depuis php
    Par philpython dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2007, 13h57
  4. Réponses: 8
    Dernier message: 27/07/2006, 09h40
  5. exécuter un script vbs depuis asp
    Par creezeer dans le forum ASP
    Réponses: 1
    Dernier message: 20/03/2006, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo