2009-11-22 7 views
1

J'essaie de réécrire le programme suivant en C au lieu de C# (qui est moins portable). Il est évident que "int system (const char * command)" sera nécessaire pour compléter le programme. Le lancer avec "int main (int argc, char * argv [])" permettra d'obtenir les arguments de la ligne de commande, mais il reste un problème difficile à comprendre. Comment réussissez-vous à échapper des arguments avec des espaces en eux? Dans le programme ci-dessous, les arguments avec des espaces en eux (exemple: screensaver.scr "ceci est un test") seront passés au script en tant qu'arguments séparés (exemple: screensaver.scr c'est un test) et pourraient facilement causer des problèmes.Rediriger les arguments de ligne de commande pour l'amorçage

namespace Boids_Screensaver 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      System.Diagnostics.Process python = new System.Diagnostics.Process(); 
      python.EnableRaisingEvents = false; 
      python.StartInfo.FileName = "C:\\Python31\\pythonw.exe"; 
      python.StartInfo.Arguments = "boids.pyw"; 
      foreach (string arg in args) 
      { 
       python.StartInfo.Arguments += " " + arg; 
      } 
      python.Start(); 
     } 
    } 
} 

Répondre

1

La bonne façon de le faire sous Windows est d'utiliser _spawnv

Son équivalent sous unix est OSes fork() suivie par execv.

2

Windows est tout foiré. Chaque programme a ses propres règles.

Questions connexes