我正在关注其中一个线程来运行我的c#程序中的perl脚本。
我的c#代码是这样的:
private void RunScript(ArrayList selectedScriptFileList)
{
foreach (var curScriptFileName in selectedScriptFileList)
{
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("perl.exe");
myProcessStartInfo.Arguments = (string)(curScriptFileName);
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcessStartInfo.CreateNoWindow = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
myProcess.WaitForExit();
string output = myProcess.StandardOutput.ReadToEnd();
this.ScriptTestResultTextBox.AppendText(output);
}
}
我的perl脚本需要XML解析。我可以在XML解析之前读取print语句,但在解析开始之后不能读取。该脚本在DoS shell上运行find。
以下是我的脚本的一部分:
print("\n");
print("****************** test1.pl ***********************\n");
print("\n");
print("1");
print("2");
my $scriptName = 'test1.pl';
my $file = '../../ScriptParamLib.xml';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($file);
my $root = $tree->getDocumentElement;
my @species = $root->getElementsByTagName('test_node');
print("Accessing XML Data Base...\n");
c#testbox仅显示前三个print语句,但不显示最后一个。 有谁知道为什么?
由于
答案 0 :(得分:4)
您可以添加更多调试打印语句(例如,代码的每个其他行之间的一个),以查看执行的程度。但是,我将采取预感并建议将这三行添加到您的脚本中,或者直接解决问题,或者让您更接近解决方案:
use strict;
use warnings;
use XML::LibXML;
请更新您的问题,说明执行的程度以及您看到的错误!
答案 1 :(得分:0)
我认为我应该将我的评论写成答案,因为它们证明是有用的:
由于在Perl脚本中使用$file
的绝对路径可行,因此该问题很可能与从C#程序生成的进程的工作目录有关。您可以使用Perl脚本中的Cwd module来查看工作目录的实际内容。如果它不是您所期望的,请尝试通过C#程序中ProcessStartInfo的WorkingDirectory属性进行设置。在此之后,相对路径应该可以正常工作。