2009-09-04 4 views
1

J'essaie d'utiliser la classe System.Diagnostics.Process pour exécuter un script Perl à partir d'une application ASP.NET. La commande Perl s'exécute correctement lorsque je la tape dans la ligne de commande, mais lorsque ASP.NET essaie d'exécuter la même commande, cela ne fonctionne pas. Je suppose qu'il peut s'agir d'un flux d'entrée et de sortie. Le script Perl met longtemps à s'exécuter sur la ligne de commande. Mais dans .NET la commande retourne presque immédiatement, et quand j'essaye de rediriger la sortie standard du script Perl pour voir quels messages sont cédés, il montre juste la première ligne et retourne. L'utilisation de techniques de lecture de flux bloquant ne résout pas cela; .NET pense vraiment que le script Perl sort une seule ligne, puis se termine.Pourquoi ne puis-je pas appeler un script Perl avec System.Diagnostics.Process d'ASP.NET?

Des suggestions? Autant que je voudrais, le script ne peut pas être réécrit dans .NET. Voici le code que j'utilise pour lancer le processus. J'ai essayé de changer ReadToEnd() à une série d'appels ReadLine(), mais après le premier appel renvoie la première ligne de sortie l'appel suivant renvoie null.

Process proc = new Process(); 
proc.StartInfo.FileName = scriptPath; 
proc.StartInfo.Arguments = arguments; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.StartInfo.UseShellExecute = false; 
proc.Start(); 
string output = proc.StandardOutput.ReadToEnd(); // Returns only the first line 
proc.WaitForExit(); 

Répondre

2

Passer les 2 dernières lignes:

lineproc.WaitForExit(); 
string output = proc.StandardOutput.ReadToEnd(); // Returns only the first 

ou construire une boucle qui continue à lire à partir proc.StandardOutput jusqu'à ce que le script est terminé.

Questions connexes