【问题标题】:How to call Perl Script in Visual Studio with C#如何使用 C# 在 Visual Studio 中调用 Perl 脚本
【发布时间】:2013-06-25 14:48:56
【问题描述】:

所以目前我在 Visual Studio 中有一个 C#/ASP.net 应用程序。我还有一个由其他人编写的 perl 脚本,我必须在我的 C#/ASP.NET 应用程序中使用它。最终目标是将我的 C#/ASP.NET 代码中生成的字符串传递到这个 perl 脚本(该字符串是一个文件路径),以便 perl 脚本运行并给出适当的输出。

我翻遍了,只找到了这个例子:

ProcessStartInfo perlStartInfo = new ProcessStartInfo(@"d:\Perl\bin\perl.exe");
perlStartInfo.Arguments = "c:\\word-splitter.pl " + "c:\\a.txt" + " ispell";
perlStartInfo.UseShellExecute = false;
perlStartInfo.RedirectStandardOutput = true;
perlStartInfo.RedirectStandardError = true;
perlStartInfo.CreateNoWindow = false;

Process perl = new Process();
perl.StartInfo = perlStartInfo;
perl.Start();
perl.WaitForExit();
string output = perl.StandardOutput.ReadToEnd();

链接在这里:http://social.msdn.microsoft.com/Forums/vstudio/en-US/ea9455e1-b254-49e1-99df-41718ea80b5b/how-to-run-perl-scripts-in-c

问题在于,每当我将此代码放入 Visual Studio 时,它都无法识别 ProcessStartInfo 或此代码块使用的任何其他命名空间。我错过了一个程序集吗?...这个块到底是做什么的?我尝试搜索 Nuget 包和程序集,但只发现 PCRE(Perl 兼容正则表达式)无法安装,因为它与 .NetFramwork V4.5 不兼容。

所以我的问题是:在 C#/ASP.NET 应用程序中运行 perl 脚本的协议是什么?

谢谢。

【问题讨论】:

  • 澄清一下,你已经加入了using System.Diagnostics,对吧?
  • 我刚刚添加了它。现在可以识别名称空间。但是,我仍然不清楚从这里去哪里。感谢您的帮助!
  • 查看 MSDN 了解您正在使用的课程 - 有很多信息。在 SO/everywhere 上搜索类似问题...当您通过“请解释 Process.Start 的工作原理”时更新问题,使其成为适合 SO 的具体问题。 (投票暂时关闭)

标签: c# asp.net perl visual-studio-2012


【解决方案1】:

您的基本大纲是正确的,所以我不会费心为您提供分步指南。此外,我认为我不会像the documentation 那样有帮助。但是,主要思想是ProcessStartInfo 本质上用于设置生成单独进程所需的所有属性。然后,Process 用于实际启动进程。 WaitForExit() 阻止您的程序继续执行,直到生成的进程完成。

不过,我还是要说几句:

  1. 您正在重定向标准输出,但您似乎并没有真正告诉它去哪里。因此,尝试ReadToEnd() 并没有真正可以读取的地方...

  2. 首先让进程运行。不要尝试重定向输入/输出或隐藏窗口,直到您可以生成进程,看到它工作/直接向终端提供输入,然后看着它退出。增量编程是你的朋友!

  3. 阅读文档链接。它相当简单,并提供了很好的代码示例。实际上,您需要担心的属性屈指可数,因此目前不要着急调整每一件小事。

【讨论】:

  • 非常感谢!我想我会尝试在 C# 中运行一个简单的 Hello World perl 脚本,同时牢记您所说的内容。感谢您的清晰解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多