运行Perl通过C#代码
我想通过C#代码运行perl脚本。 perl脚本将一个文本文件作为输入,并创建两个新文件作为输出(在两者之间进行一些文本处理)。当我使用下面的代码通过C#运行perl脚本时,它似乎开始执行,但没有创建文件。有什么问题?语法错误?运行Perl通过C#代码
ProcessStartInfo perlStartInfo = new ProcessStartInfo(@"c:\Perl\bin\perl.exe");
perlStartInfo.Arguments = "c:\\Perl\\DOC-MAT.pl " + "c:\\Perl\\comb1.txt" + "c:\\Perl\\comb1.mat";
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();
这里,comb1.txt是我的输入文件,并comb1.mat和comb1.clabel应当由Perl代码越来越创建的文件。
它看起来好像缺少字符串连接中两个文件参数之间的空格。
perlStartInfo.Arguments = "c:\\Perl\\DOC-MAT.pl " + "c:\\Perl\\comb1.txt" + "c:\\Perl\\comb1.mat";
应该是:
perlStartInfo.Arguments = "c:\\Perl\\DOC-MAT.pl " + "c:\\Perl\\comb1.txt " + "c:\\Perl\\comb1.mat";
也许是更好的选择是建立参数字符串数组或列表,并使用string.Join
做串联。
var args = new List<string>();
args.Add(@"c:\file1");
args.Add(@"c:\file2");
psi.Arguments = string.Join(" ", args);
以上将在.NET4工作,以前的版本可能会要求您将它传递给join方法之前调用args.ToArray()
。
重要编辑:此外,我认为你需要交换最后两行,以防止进程无限期地等待输出缓冲区清除。有关更多详细信息,请参阅Process.StandardOutput (MSDN)。
感谢您的帮助! – Cyang 2012-02-13 09:56:49
我为Aiur做! – 2012-02-13 10:30:54
1)该程序是否具有'C:\ Perl'的写权限? 2)是否有可能将文件写入标准输出并因此写入“字符串输出”? – 2012-02-13 09:49:38