我是C#和Perl的新手,但我已经用其他语言编程了几年了。但无论如何,我一直在尝试编写一个简单的程序,通过其STDIN将值从C#程序传递到Perl脚本。 C#程序打开Perl脚本就好了,但我似乎无法找到一种方法将'1'传递给它。这样做的最佳方式是什么?我一直在寻找解决方案,但没有运气......
C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace OpenPerl
{
class Program
{
static void Main(string[] args)
{
string path ="Z:\\folder\\test.pl";
Process p = new Process();
Process.Start(path, @"1");
}
}
}
Perl程序
#!/usr/bin/perl
use strict;
use warnings;
print "Enter 1: ";
my $number=<STDIN>;
if($number==1)
{
print "You entered 1\n\n";
}
答案 0 :(得分:1)
答案 1 :(得分:1)
您正在将命令行参数传递给perl脚本,而不是通过Process.Start(字符串,字符串)传递用户输入。
尝试打印perl脚本收到的@ARGV,你应该可以看到1。
答案 2 :(得分:1)
如果你希望perl脚本通过STDIN接收它的输入,那么C#端看起来像这样:
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.StandardInput.WriteLine("1");
UseShellExecute
需要设置RedirectStandardInput
,但这可能会阻止perl脚本正常启动。在这种情况下,请设置FileName="<path to perl.exe>"
和Arguments="<path to script.pl>"
。